Python基础教程(四):字典:当索引不好用时

字典,通过名字来引用值的数据结构,这种类型的数据结构称为映射(mapping),其为Python中唯一内奸的映射类型。字典中的值没有特殊的顺序,都存储在特定的键(Key)。键可以是数字、字符串或元组

字典由多个键机器对应的值构成的键-值对组成(键-值对称为项),每个键与其值之间用冒号隔开,项之间用逗号隔开,整个字典由一对大括号括起来。空字典由两个大括号组成

  • dict函数:通过其他映射或者键-值对的序列建立字典

          items=[('name', 'Gumby'), ('age', 42)]
          d=dict(items)       #返回{'age': 42, 'name': 'Gumby'}
          d=dict('name'='Gumby', age=42)
    
  • 基本字典操作与序列类似,都有一些重要区别:

    • 键类型:键可以是任意的不可变类型,不一定为整型数据
    • 自动添加:机器键起初在字典中并不存在,也可以为其赋值,字典就会建立新的项
    • 成员资格:k in d(字典)查找的是键,而v in l(列表)查找值

字典方法

  • clear: 清除字典中所有的项。存在关联到新的字典,要清空原始字典中所有的元素,必须使用clear方法

  • copy: 返回一个具有键-值对的新字典(实现的为浅复制)。在副本中替换值的时候,原始字典不受影响,但是修改了某个值,而不是替换,则原始字典也改变

    避免这问题的一种和方法就是深复制,复制其包含的所有值,则修改(添加或删除)副本中的值,原始字典不受影响

  • fromkeys: 使用给定的键建立新的字典。每个键都对应一个默认的值None, 也可直接在dict上调用该方法

          {}.fromkeys(['name', 'age'])        #返回{'age': None, 'name': None}
          dict.fromkeys(['name', 'age'])
          dict.fromekeys(['name', 'age'], '(unknown)')    #自己提供默认值
    
  • get: 宽松的访问字典项的方法。如果键存在,返回其值;如果键不存在,则返回None

          - d.get('name')     #不存在则返回None
          - d.get('name', 'N/A')      #不存在则返回'N/A' 
    
  • has_key: 检查字典中是否含有特点的键,d.has_key(k)相当于k in d,返回True或False

  • item和iteritems: item将字典所有的项以列表方式返回,列表中的每一项都表示为键-值对的形式,项在返回时没有遵循特定的次序

          d.items()       #返回[('url': 'www.python.org'), 'statues': 'OK']
          it=d.iteritems()
          list(it)
    
  • keys和iterkeys: 将字典中的键以列表的列表形式返回,而iterkeys则返回针对键的迭代器

  • pop: 用来获得对应于给定的键,然后将这个键-值对从字典中移除d.pop('x')

  • popitem: 类似于list.pop,popitem弹出随机的项

  • setdefault: 类似于get方法,能够获得与给定键相关联的值,另外,setdefault还能在字典中不含有给定键的情况下设定相应的键值

          d.setdefault('name', 'N/A')     #返回'N/A'
          d['name']='Gumby'         
          d.setdefault('name', 'N/A')     #返回'Gumby'
    
  • update: 利用一个字典项更新另外一个字典d.update(X)

  • values和itervalues: values方法以列表的形式返回字典中的值,itervalues返回值的迭代器。与返回键的列表不同的是,返回值的列表中可以包含重复的元素

本章新函数

  • dict(seq) 用(键,值)对或映射关系建立字典