码迷,mamicode.com
首页 > 其他好文 > 详细

collections.ChainMap类合并字典或映射

时间:2018-07-23 00:05:25      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:数字   找不到   ror   cti   print   post   删除   date   ons   

## 使用update()方法或者ChainMap类合并字典或映射

 

 1 # 使用update()方法合并
 2 
 3 a = {x: 1, z: 3}
 4 b = {y: 2, z: 4}
 5 merged = dict(b) # 创建一个新字典
 6 print(merged)
 7 # {‘y‘: 2, ‘z‘: 4}
 8 merged.update(a) # 更新字典数据(合并)
 9 print(merged)
10 # {‘y‘: 2, ‘z‘: 3, ‘x‘: 1}
11 
12 a[x] = 10     # 对原有字典的改变不会影响合并后的字典
13 print(merged)
14 # {‘y‘: 2, ‘z‘: 3, ‘x‘: 1}
15 
16 
17 
18 # 使用collections.ChainMap()类
19 from collections import ChainMap
20 
21 
22 a = {x: 1, z: 3}
23 b = {y: 2, z: 4}
24 c = ChainMap(a, b)
25 print(c)
26 # ChainMap({‘x‘: 1, ‘z‘: 3}, {‘y‘: 2, ‘z‘: 4})
27 
28 
29 # 数据的读取总是从第一个字典开始查找,找不到再从第二个中查找
30 print(c[x])
31 # 1
32 print(c[y])
33 # 2
34 print(c[z])
35 # 3
36 
37 
38 # 数据的增加或者删除操作总是针对第一个字典
39 c[w] = 4
40 print(c)
41 # ChainMap({‘x‘: 1, ‘z‘: 3, ‘w‘: 4}, {‘y‘: 2, ‘z‘: 4})
42 
43 del c[w]
44 print(c)
45 # ChainMap({‘x‘: 1, ‘z‘: 3}, {‘y‘: 2, ‘z‘: 4})
46 
47 del c[y]      # 无法删除第二个字典中的键值对
48 # KeyError: ‘y‘
49 # KeyError: "Key not found in the first mapping: ‘y‘"
50 
51 
52 # 对原有字典的操作会影响合并的字典
53 a = {x: 1, z: 3}
54 b = {y: 2, z: 4}
55 c = ChainMap(a, b)
56 print(c)
57 # ChainMap({‘x‘: 1, ‘z‘: 3}, {‘y‘: 2, ‘z‘: 4})
58 print(c[x])
59 # 1
60 print(c[y])
61 # 2
62 print(c[z])
63 # 3
64 
65 a[x] = 5  # 修改原有字典的值
66 print(c[x])  # 合并的字典受到影响
67 # 5
68 
69 
70 # ChainMap()对象支持大多数字典的操作
71 print(len(c))
72 # 3
73 print(list(c.keys()))
74 # [‘x‘, ‘y‘, ‘z‘]
75 print(list(c.values()))
76 # [5, 2, 3]
77 
78 
79 # 添加或删除新的字典
80 values = ChainMap()
81 values[x] = 1
82 values = values.new_child()  # 添加一个空白字典
83 print(values)
84 # ChainMap({}, {‘x‘: 1})
85 values[x] = 2  # 给空白字典添加内容
86 print(values)
87 # ChainMap({‘x‘: 2}, {‘x‘: 1})
88 values = values.new_child()
89 values[x] = 3
90 print(values)
91 # ChainMap({‘x‘: 3}, {‘x‘: 2}, {‘x‘: 1})
92 
93 # 删除第一个字典
94 values = values.parents
95 print(values)
96 # ChainMap({‘x‘: 2}, {‘x‘: 1})
97 values = values.parents
98 print(values)
99 # ChainMap({‘x‘: 1})

 

 

参考资料:
  Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).

collections.ChainMap类合并字典或映射

标签:数字   找不到   ror   cti   print   post   删除   date   ons   

原文地址:https://www.cnblogs.com/hycstar/p/9352125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!