字典排序与运算
1.字典排序
- collections模块OrderedDict类在迭代操作中可以保持元素被插入时的顺序
from collections import OrderedDict d = OrderedDict() d['foo'] = 1 d['bar'] = 2 d['spam'] = 3 d['grok'] = 4 d['foo'] = 5 for key in d: print(key,d[key]) print(d) ##foo 5 bar 2 spam 3 grok 4
- OrderedDict可以构建将来需要序列化或者编码成其他格式的映射
import json json.dumps(d) #'{"foo": 5, "bar": 2, "spam": 3, "grok": 4}'
2. 字典运算
- 对字典值进行计算操作时通常需要使用zip()函数将键和值反转过来
prices = { 'ACME': 45.23, 'AAPL': 612.78, 'IBM': 205.55, 'HPQ': 37.20, 'FB': 10.75 } min_price = min(zip(prices.values(),prices.keys())) max_price = max(zip(prices.values(),prices.keys())) print(min_price) #(10.75, 'FB') print(max_price) #(612.78, 'AAPL')
- 还可以用zip()和sorted()进行排序
prices_sorted = sorted(zip(prices.values(),prices.keys())) print(prices_sorted) #[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
注意:
zip()函数创建的是只能访问一次的迭代器:
prices_names = zip(prices.values(),prices.keys()) print(min(prices_names)) ##(10.75, 'FB') print(max(prices_names)) #多次访问,错误 ValueError: max() arg is an empty sequence
- 当在一个字典上执行普通运算时,它们仅仅只作用于键,用zip()函数交换键值,不仅能得到键还能得到值
3. 查找两字典的相同点
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 } print(a.keys() & b.keys())#{'x', 'y'} #打印ab相同的键 print(a.keys()-b.keys()) #{'z'}#打印a中b没有的键 print(a.items() & b.items())#{('y', 2)} #打印a,b中键值相同的键值
- 可以用这种方法过滤或修改字典元素
c = {key:a[key] for key in a.keys()-{'y':'d'}}
print(c) #{'x': 1, 'z': 3}
微笑向暖安之若素,你若盛开清风自来

浙公网安备 33010602011771号