字典-dict
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)
浙公网安备 33010602011771号