Python进阶篇之字典操作总结进阶篇之字典操作总结
一、与字典值有关的计算一、与字典值有关的计算
问题问题
想对字典的值进行相关计算,例如找出字典里对应值最大(最小)的项。
解决方案一:解决方案一:
假设要从字典 {‘a’:3, ‘b’:2, ‘c’:6} 中找出值最小的项,可以这样做:
>>> d = {'a':3, 'b':2, 'c':6}
>>> min(zip(d.values(), d.keys()))
(2, 'b')
值得注意的是 d.values() 获取字典的全部值,d.keys() 获取字典的全部键,而且两个序列的顺序依然保持一一对应的关系。因
此 zip(d.values() , d.keys()) 实质上生成的是一个 (value, key) 的序列。min 函数通过比较序列中的元组 (value, key) 找出其最小
值。
解决方案二:解决方案二:
除了使用 zip(d.values() , d.keys()) 外,还可以使用 dict.items() 方法和生成器推导式来生成 (value, key) 序列,从而传递给 min 函数
进行比较:
>>> d = {'a':3, 'b':2, 'c':6}
>>> min((v ,k) for (k, v) in d.items())
(2, 'b')
这里 min 函数的参数 (v ,k) for (k, v) in d.items() 其实是一个生成器推导式(和列表推导式一样,只是把列表推导式的 [] 改为 () ,
而且其返回的一个生成器而非列表),由于生成器推导式做为 min 函数的参数,所以可以省略掉两边的括号(不做为参数时
写法应该是 ((v ,k) for (k, v) in d.items()) ) 。
二、字典推导式二、字典推导式
问题问题
想把一个元组列表转换成一个字典,例如把 [('a', 1), ('b', 2), ('c', 3)] 转化为 {'a': 1, 'b': 2, 'c': 3}
解决方案解决方案
类似于列表推导式,字典推导式可以方便地从其他数据结构构造字典,例如:
>>> l = [('a', 1), ('b', 2), ('c', 3)] >>> {k: v for k, v in l}
{'c': 3, 'b': 2, 'a': 1}
字典推导式的规则和列表推导式一样,只是把 [] 换成 {}
三、寻找字典的交集三、寻找字典的交集
问题问题
假设有两个字典:
d1 = {'a':1, 'b':2, 'c':3, 'd':4}
d2 = {'b':2, 'c':3, 'd':3, 'e':5}
要找出这两个字典中具有公共键的项,即要得到结果 {‘b’:2, ‘c’:3}
解决方案解决方案
我们知道一般通过 d.items() 方法来遍历字典,d.items() 方法返回的对象是一个类集合对象,支持集合的基本运算,如取交集、
并集等。
>>> dict(d1.items() & d2.items()) # 取交集
{'b': 2, 'c': 3}
此外,d.keys() 返回字典的键,也是一个类集合对象,如果我们只想找出两个字典中键相同的项,可以这样: