本文摘自php中文网,作者Guanhui,侵删。
问题
现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。
解决方案
加入你有如下两个字典:
1 2 | a = { 'x' : 1 , 'z' : 3 }
b = { 'y' : 2 , 'z' : 4 }
|
现在假设你必须在两个字典中执行查找操作(比如先从a中找,如果找不到再在b中找)。一个非常简单扼解决方案就是使用collections模块中的ChainMap类。比如:
1 2 3 4 5 | from collections import ChainMap
c = ChainMap(a,b)
print (c[ 'x' ])
print (c[ 'y' ])
print (c[ 'z' ])
|
讨论
一个ChainMap接受多个字典并将它们在逻辑上变为一个字典。然后,这些字典并不是真的合并在一起了,ChainMap类只是在内部创建了一个容纳这些字典的列表并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的,比如:
1 2 3 4 5 6 7 | >>> len (c)
3
>>> list (c.keys())
[ 'x' , 'y' , 'z' ]
>>> list (c.values())
[ 1 , 2 , 3 ]
>>>
|
如果出现重复键,那么第一次出现的映射值会被返回。因此,例子程序中的c[‘z']总是会返回字典a中对应的值,而不是b中对应的值。
对于字典的更新或删除操作总是影响的是列表中第一个字典。比如:
1 2 3 4 5 6 7 8 9 10 | >>> c[ 'z' ] = 10
>>> c[ 'w' ] = 40
>>> del c[ 'x' ]
>>> a
{ 'w' : 40 , 'z' : 10 }
>>> del c[ 'y' ]
Traceback (most recent call last):
...
KeyError: "Key not found in the first mapping: 'y'"
>>>
|
ChainMap对于编程语言中的作用范围变量(比如globals, locals等)是非常有用的。事实上,有一些方法可以使它变得简单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | >>> values = ChainMap()
>>> values[ 'x' ] = 1
>>>
>>> values = values.new_child()
>>> values[ 'x' ] = 2
>>>
>>> values = values.new_child()
>>> values[ 'x' ] = 3
>>> values
ChainMap({ 'x' : 3 }, { 'x' : 2 }, { 'x' : 1 })
>>> values[ 'x' ]
3
>>>
>>> values = values.parents
>>> values[ 'x' ]
2
>>>
>>> values = values.parents
>>> values[ 'x' ]
1
>>> values
ChainMap({ 'x' : 1 })
>>>
|
作为ChainMap的替代,你可能会考虑使用update()方法将两个字典合并。比如:
1 2 3 4 5 6 7 8 9 10 11 | >>> a = { 'x' : 1 , 'z' : 3 }
>>> b = { 'y' : 2 , 'z' : 4 }
>>> merged = dict (b)
>>> merged.update(a)
>>> merged[ 'x' ]
1
>>> merged[ 'y' ]
2
>>> merged[ 'z' ]
3
>>>
|
这样也能行得通,但是它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。比如:
1 2 3 | >>> a[ 'x' ] = 13
>>> merged[ 'x' ]
1
|
ChianMap使用原来的字典,它自己不创建新的字典。所以它并不会产生上面所说的结果,比如:
1 2 3 4 5 6 7 8 9 | >>> a = { 'x' : 1 , 'z' : 3 }
>>> b = { 'y' : 2 , 'z' : 4 }
>>> merged = ChainMap(a, b)
>>> merged[ 'x' ]
1
>>> a[ 'x' ] = 42
>>> merged[ 'x' ]
42
>>>
|
推荐教程:《Python教程》
以上就是Python 合并多个字典或映射教程的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
基于Python的多进程共享变量正确打开方式
3分钟搞懂Python中dict函数的含义是什么
Python shell是什么
安装完Python后怎么用
Python读写文件的代码示例
Python中psutil库的使用介绍(详细)
安装Python还要安装什么
解析Python中executemany和序列用法教程
Python如何求1到100的奇数和
使用Python和xlwt向excel文件中写入中文
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » Python 合并多个字典或映射教程