免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1896 | 回复: 0
打印 上一主题 下一主题

python(9): dictionary [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-24 20:06 |只看该作者 |倒序浏览

               
                在python的mapping大类型中dictionary是唯一的内置类型。与list和string等sequence相比,dictrionary的最大特点是它的成员没有顺序之说。除此之外,对dictionary成员的访问是通过key来进行的,而不是像list一样,通过index来进行。不过,dictionary与list也有相同之处,它们都是可变的。tuple则正好相反,是不可变的、有顺序的。
dictionary的表示方式为:
  • {key1:value1, key2:value2, key3:value3...}
与list中的成员一样,value可以是任何对象。但是key有点特殊,首先key必须是不可变的对象,因为dictionary的操作是通过key来标识的,如果key可变的话,那么在一个程序的前后对同一个对象的访问可能就得用不同的形式,会引起混乱。因此,可变的list不能作为key。也因为如此,在一个dictionary中,key不能重复。在python内部,dictionary是以hash表的形式存在的。内置函数dict()可以用于产生一个dictionary对象。b可取的值相当于dictionary专属函数update()中b的值。
下面来看看对dictionary的操作。首先计算一个dictionary中有多少个key:value组用len()。由于dictionary是没有顺序的,所以+ * 分片等操作对于dictionary来说是非法的。访问dictionary的成员必须通过D[key]的方式。下面来看例子:
  • >>> D = {'one':1, 'two':2}
  • >>> D['one']
  •     1
  • >>> D['one'] = 0
  • >>> D
  •     {'one':0, 'two':2}
  • >>> D['three'] = 3
  • >>> D
  •     {'one':0, 'two':2, 'three':3}第1行定义了一个dictionary类的对象D。第2行表现对D中成员访问的方式。第4行,通过赋值的方式改变了一个成员的值,这也表明dictionary是可变的。第7行,表明一个重要的功能,如果用一个dictionary中不存在key进行赋值操作时,就相当于给这个dictionary添加了一个新的成员。
    与list和string类似,dictionary也有自己的专属函数。
    • D.keys() #返回一个包含所有key的list
    • D.values() #返回一个包含所有值的list
    • D.items() #返回一个以(key:value)为成员的list
    • D.get(k[, x])
      #取D[k]的值,如果没有分键k,则返回x。如果k没有,x也没有提供则返回None。注意即使k不存在,D也没有改变,并不会把k:x加到D中。
    • D.setdefault(k[,x])
      #与get()一样,会返回D[k]。但如果k没有,k:x这个成员会被添加到D中。返回x
    • D.clear() #清除D中的内容
    • D.copy() #返回一个新的dictionary,它是D的拷贝
    • D.pop(k[,x]) #与setdefault()类似。在返回D[k]的同时,会把k:value这个成员删除,D会改变。如果没有提供x,而且k又不存在,会出现一个KeyError
    • D.popitem() #在D返回一个key:value对,然后在D中删除它
    • D.update() #应用b的值,来更新D。b可以是其他的mapping类型,也可以是遍历时每次取出的是一个只有两个成员的tuple的类型,比如:[(1,'one'), (2:'two')],这个list在遍历时,取出的值是(1,'one')和(2, 'two')。还可以用"key=value,..."这样的参数。有一个zip()内置函数在这里特别有用,zip(seq1,seq2...)返回一个以tuple为成员的list,第一个tuple包含一个seq1的第一个值,seq2的第一个值...。
    • D.fromkeys(seq[,value]) #以seq为keys,创建一个新dictionary,如果没有提供value,则各key的值为None。注意这里会创建一个新dictionary,而不是改变原来的dictionary,如果要用原来的符号标识新dictionary,应该用D=D.fromkeys(k)的形式。
    在前面说到用for ... in ...的方式来遍历一个list,其实这种方式也可以用来遍历一个dictionary。dictionary是由key:value组成的,那么:
    • for x in D
    x每次取的值是什么呢?先来看几个函数:
    • D.iterkeys()
    • D.itervalues()
    • D.iteritems()
    这三个函数均返回一个iterator对象,分别是keys\values\items的iterator。可以用在for循环中。比如:
    • for x in D.iterkeys()
    上面说到的for x in D实际上就是这种形式的简写,x遍历的是keys。如果要遍历values,也很简单只要把D.iterkeys()改为D.itervalues()就可以了。iteritems()也类似。在iterator对象中有一个next()的方法,可以像for一样,一次一次的调用next()方法,可以遍历iterator中的数据。
                   
                   
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2809/showart_78218.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP