1. dict
字典是Python提供的一种数据类型,用于存放有映射关系的数据,字典相当于两组数据,其中一组是key,是关键数据(程序对字典的操作都是基于key),
另一组数据是value,可以通过key来进行访问。
列出一些常用的API:
dict.clear() # 删除字典内所有元素 dict.copy() # 返回一个字典的浅复制 dict.items() # 以列表返回可遍历的(键, 值)元组数组 dict.keys() # 以列表返回一个字典所有的键 dict.values() # 以列表返回字典中的所有值 dict.get(key, default=None) # 返回指定键的值,如果值不在字典中返回default值 dict.setdefault(key, default=None) # 和get()类似, 如果键不存在于字典中,将会添加键并将值设为default。如果字典中包含该键,则返回该键对应的值,否则返回为该键设置的值。 dict.update(dict2) # 把字典dict2的键/值对更新到dict里 dict.popitem() # 返回并删除字典中的最后一对键和值 dict.pop(key[,default]) # 删除字典给定键 key 及对应的值,返回值为被删除的值 dict.fromkeys(seq[, val]) # 创建一个新字典,以序列 seq 中元素做字典的键,val为字典所有键对应的初始值 len(dict) # 计算字典元素个数,即键的总数 cmp(dict1, dict2) # 比较两个字典元素
下面举几个例子:
d = {} # d = dict() d.setdefault('a', []).append(1) d.setdefault('a', []).append(2) d.setdefault('b', []).append(4) print(d) # 通过 in 或 not in 运算符判断字典是否包含指定的 key print('a' in d) e = d.copy() e.clear() print(e) # 获取元素 print(d.get('a')) print(d['a']) print(d.get('c')) print(list(d.items())) print(list(d.keys())) print(list(d.values())) g = d.popitem() print(g) print(d) h = dict(k1 =1, k2 = 2) d.update(h) print(d) print(d.pop('k1')) # 由元组生成字典 headers = ['name', 'shares', 'price'] values = ['ACME', 100, 490.1] s = dict(zip(headers,values)) print(s)
dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。默认情况下,dict迭代的是key。
d = {'d': 1, 'b': 2, 'c': 3} for key in d: print(key)
如果要迭代value,可以这么做:
d = {'d': 1, 'b': 2, 'c': 3} for value in d.values(): print(value)
同时迭代key和value,可以这么做:
d = {'d': 1, 'b': 2, 'c': 3} for k, v in d.items(): print(k, v)
2. defaultdict
使用defaultdict为字典的每个key设置默认值,当访问的key不存在时,该字典不会报错,而是会返回设置的默认值。
from collections import defaultdict d = defaultdict(list) print(d['a']) # 输出[]
可以使用 defaultdict 来创建一个多值映射字典,即 value 是容器类型,免去初始化的麻烦。
3. OrderedDict
为了能控制一个字典中元素的顺序,你可以使用 collections 模块中的 OrderedDict 类。在迭代操作的时候它会保持元素被插入时的顺序。
from collections import OrderedDict d = OrderedDict() d['foo'] = 1 d['bar'] = 2 d['spam'] = 3 d['grok'] = 4 # Outputs "foo 1", "bar 2", "spam 3", "grok 4" for key in d: print(key, d[key])
测试的时候发现 dict 其实也是按插入顺序输出的,不知道是不是python3做出的更改。
4. 字典推导式
字典推导和列表推导的使用方法是类似的,只不中括号该改成大括号。直接举例说明:
prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } p = { key: value for key, value in prices.items() if value > 200 } print(p)