欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python 字典操作

程序员文章站 2022-03-21 18:39:08
字典映射多个值,defaultdict的使用,字典求最大值、最小值、排序,字典的异同比较 ......

## 一个键映射多个值,将元素对转换为 d = {'a': [1,2,3,4], 'b': [5,6,7,8]}

  # 普通方法

1 pairs = [('a', 1),('b', 5),('a', 4),('a', 3),('b', 8),('b', 6),('a', 2),('b', 7),]
2 d = {}
3 for k, v in pairs:
4     if k not in d:  # 若key不存在,则手动创建
5         d[k] = []
6     d[k].append(v)
7 
8 print(d)
9 # {'a': [1, 4, 3, 2], 'b': [5, 8, 6, 7]}

  

  # 使用defaultdict

1 from collections import defaultdict
2 
3 pairs = [('a', 1),('b', 5),('a', 4),('a', 3),('b', 8),('b', 6),('a', 2),('b', 7),]
4 d = defaultdict(list)  # 参数可以是列表list,也可以是集合set
5 for k, v in pairs:
6     d[k].append(v)    # 根据defaultdict的参数类型使用append或者add,defaultdict会自动创建不存在的key
7 
8 print(d)
9 # defaultdict(<class 'list'>, {'a': [1, 4, 3, 2], 'b': [5, 8, 6, 7]})

 

## 字典求最大值,最小值,排序

 1 scores = {
 2     "Stanley": 88,
 3     "Lily": 92,
 4     "Bob": 91,
 5     "Well": 80,
 6     "Peter": 92
 7 }
 8 lowest = min(scores, key=lambda s: s[1])
 9 print(lowest)
10 # Well      # 只能得到一个键
11 
12 # 使用zip()函数反转键值对,sorted()函数自动比较第一个值,若第一个值相等则比较第二个值
13 
14 ordered_scores = sorted(zip(scores.values(), scores.keys()))
15 lowest = min(ordered_scores)
16 highest = max(ordered_scores)
17 print(lowest)
18 # (80, 'Well')   # 得到完整的值键对
19 print(highest)
20 # (92, 'Peter')  # 分数相同比较第二个值, P的ASCII编码中比L大,所以结果是(92, 'Peter')
21 
22 # 注意:zip()函数创建的只是一次性访问的迭代器,不可重复访问
23 
24 zipped_scores = zip(scores.values(), scores.keys())
25 lowest = min(zipped_scores)
26 highest = max(zipped_scores) # ValueError: max() arg is an empty sequence
27 print(lowest)
28 # (80, 'Well')

 

## 字典的异同比较

 1 a = {
 2     'x': 1,
 3     'y': 2,
 4     'z': 3
 5 }
 6 b = {
 7     'o': 2,
 8     'q': 4,
 9     'y': 2
10 }
11 
12 print(a.keys() - b.keys()) # 使用减号,返回两个字典中不相同的部分
13 # {'z', 'x'}
14 print(a.keys() & b.keys()) # 使用&返回两个字典的交集
15 # {'y'}
16 print(a.items() - b.items())
17 # {('z', 3), ('x', 1)}
18 print(a.items() & b.items())
19 # {('y', 2)}
20 #
21 # 不能使用 a.values() 和 b.values() 进行比较

 

 

参考资料:

  Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).