字典排序与运算

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}

 

posted @ 2022-07-01 13:56  花桥  阅读(52)  评论(0)    收藏  举报