collections.ChainMap类合并字典或映射

## 使用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).

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

时间: 2024-10-14 15:45:03

collections.ChainMap类合并字典或映射的相关文章

【python cookbook】【数据结构与算法】20.将多个映射合并为单个映射

问题:在逻辑上将多个字典或映射合并为一个单独的映射结构,以此执行某些特定的操作,比如查找值或者检查键是否存在 解决方案:利用collections模块中的ChainMap类 ChainMap可接受多个映射然后在逻辑上使它们表现为一个单独的映射结构.这些映射在字面上并不会合并在一起.相反,ChainMap只是简单地维护一个记录底层映射关系的列表,然后重定义常见的字典操作来扫描这个列表. # example.py # # Example of combining dicts into a chain

[PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 collections.Counter 类 1. most_common(n)统计top_n from collections import Counter words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', 'my', 'eyes', 't

Python 炫技操作:合并字典的七种方法

首发于微信公众号:<Python编程时光> Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神. 但你要知道,在团队合作里,炫技是大忌. 为什么这么说呢?我说下自己的看法: 越简洁的代码,越清晰的逻辑,就越不容易出错: 在团队合作中,你的代码不只有你在维护,降低别人的阅读/理解代码逻辑的成本是一个良好的品德 简单的代码,只会用到最基本的语法糖,复杂的高级特性,会有更多的依赖(如

90%人不知道的Python炫技操作:合并字典的七种方法

Python 语言里有许多(而且是越来越多)的高级特性,是 Python 发烧友们非常喜欢的.在这些人的眼里,能够写出那些一般开发者看不懂的高级特性,就是高手,就是大神. 但你要知道,在团队合作里,炫技是大忌. 为什么这么说呢?我说下自己的看法: 越简洁的代码,越清晰的逻辑,就越不容易出错: 在团队合作中,你的代码不只有你在维护,降低别人的阅读/理解代码逻辑的成本是一个良好的品德 简单的代码,只会用到最基本的语法糖,复杂的高级特性,会有更多的依赖(如语言的版本) 该篇是「炫技系列」的第二篇内容,

day07(Set接口,HashSet类,hashcoad(),Collections工具类,Map集合)

Set接口 set接口的实现类特点 1.无序(取出来的顺序和存进去的数据的顺序不一致) 2.唯一(数据不能存相同的) 底层是用Map集合写的 HashSet类  实现了  set接口       唯一性  public class HashSetTest { public static void main(String[] args) { HashSet<String> hs=new HashSet<String>(); hs.add("hello"); hs.

TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?

TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必须实现Comparable接口从而根据键对元素进行排序.Collections工具类的sort方法有两种重载的形式,第一种要求传入的待排序容器中存放的对象比较实现Comparable接口以实现元素的比较:第二种不强制性的要求容器中的元素必须可比较,但是要求传入第二个参数,参数是Comparator接

Collections工具类、Map集合、HashMap、Hashtable(十八)

1.Map集合概述和特点 * A:Map接口概述 * 去重复, * 查看API可以知道, * 将键映射到值的对象, * 一个映射不能包含重复的键, * 每个键最多只能映射到一个值.* B:Map接口和Collection接口的不同 * Map是双列的,Collection是单列的. * Map的键唯一,Collection的子体系Set是唯一的,即不重复. * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效. 2.Map集合的功能概述 * a:添加功

Map集合、HashMap集合、LinkedHashMap集合、Hashtable集合、Collections工具类和模拟斗地主洗牌和发牌

1.Map集合概述和特点 * A:Map接口概述  * 查看API可以知道:  * 将键映射到值的对象  * 一个映射不能包含重复的键  * 每个键最多只能映射到一个值 * B:Map接口和Collection接口的不同  * Map是双列的,Collection是单列的  * Map的键唯一,Collection的子体系Set是唯一的  * Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效 2.Map集合的功能概述 * A:Map集合的功能概述  *

Collections 工具类和 Arrays 工具类常见方法

Collections 工具类和 Arrays 工具类常见方法 Collections Collections 工具类常用方法: 排序 查找,替换操作 同步控制(不推荐,需要线程安全的集合类型时请考虑使用 JUC 包下的并发集合) 排序操作 void reverse(List list)//反转 void shuffle(List list)//随机排序 void sort(List list)//按自然排序的升序排序 void sort(List list, Comparator c)//定制