Python的ChainMap
类是一个非常有用的数据结构,可以让多个字典按照顺序合并成为一个字典,可以在这个新字典中进行键值查找和修改操作。简单来说,ChainMap会按照顺序查找多个字典,并返回最先找到的键值对。
具体步骤如下:
- 导入ChainMap类
from collections import ChainMap
- 创建多个字典
dict_1 = {'a':1,'b':2}
dict_2 = {'b':3,'d':4}
dict_3 = {'e':5}
- 使用ChainMap类创建新字典
new_dict = ChainMap(dict_1, dict_2, dict_3)
新字典new_dict
中,dict_1
排在最前面,所以new_dict['a']
返回1
。如果a
不在dict_1
中,则会依次在后续字典中查找,直到找到为止。同理,如果a
在所有字典中都不存在,则会抛出KeyError
异常。
下面以两条示例说明:
例1:使用ChainMap类,将两个字典合并为一个,然后按照值进行排序。
from collections import ChainMap
dict_1 = {'a': 3, 'b': 5, 'c': 6}
dict_2 = {'d': 2, 'e': 1, 'f': 9}
new_dict = ChainMap(dict_1, dict_2)
sorted_dict = {k: v for k, v in sorted(new_dict.items(), key=lambda item: item[1])}
print(sorted_dict)
# {'e': 1, 'd': 2, 'a': 3, 'b': 5, 'c': 6, 'f': 9}
首先创建了两个字典dict_1
和dict_2
,然后使用ChainMap
类将其合并为一个新字典new_dict
。最后使用sorted()函数按照字典值排序,生成了一个新字典sorted_dict
。
例2:使用ChainMap类,可以通过新建字典并更新的方式对多个字典进行修改。
from collections import ChainMap
dict_1 = {'a': 1, 'b': 2, 'c': 3}
dict_2 = {'b': 4, 'c': 6, 'd': 7}
dict_3 = {'b': 5}
new_dict = ChainMap(dict_1, dict_2, dict_3)
print(new_dict)
# ChainMap({'a': 1, 'b': 2, 'c': 3}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})
new_dict = new_dict.new_child({'b': 8, 'e': 9})
print(new_dict)
# ChainMap({'a': 1, 'b': 8, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})
new_dict['b'] = 10
print(new_dict)
# ChainMap({'a': 1, 'b': 10, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})
dict_1['b'] = 11
print(new_dict)
# ChainMap({'a': 1, 'b': 10, 'c': 3, 'e': 9}, {'b': 4, 'c': 6, 'd': 7}, {'b': 5})
首先创建了三个字典dict_1、dict_2、dict_3
,然后使用ChainMap
类将其合并为一个新字典new_dict
。接着新建一个子字典,修改b
和e
的键值并加入到新字典中,使用new_child()
方法将其添加到原有字典中。可以看到,在新字典中b
的值被修改为8
。
然后对新字典中的b
键进行了修改,将其赋值为10
,可以看到修改成功。接着修改了原有字典dict_1
中的b
键,但是new_dict
中的b
键并没有得到改变,因为其已经存在于新字典中了。
总的来说,使用ChainMap
类可以方便地进行多个字典的合并和查找,支持修改操作,使得字典操作更加便捷。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现字典序列ChainMap - Python技术站