首页后端开发PythonPython 合并多个字典或映射教程
恒创 云服务器免费试用

Python 合并多个字典或映射教程

时间2024-02-13 08:15:03发布访客分类Python浏览720
导读:收集整理的这篇文章主要介绍了Python 合并多个字典或映射教程,觉得挺不错的,现在分享给大家,也给大家做个参考。问题现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。解决方案加...
收集整理的这篇文章主要介绍了Python 合并多个字典或映射教程,觉得挺不错的,现在分享给大家,也给大家做个参考。

问题

现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作,比如查找值或者检查某些键是否存在。

解决方案

加入你有如下两个字典:

a = {
'x': 1, 'z': 3 }
b = {
'y': 2, 'z': 4 }
    

现在假设你必须在两个字典中执行查找操作(比如先从a中找,如果找不到再在b中找)。一个非常简单扼解决方案就是使用collections模块中的ChainMap类。比如:

From collections import ChainMapc = ChainMap(a,b)PRint(c['x']) # Outputs 1 (from a)print(c['y']) # Outputs 2 (from b)print(c['z']) # Outputs 3 (from a)

讨论

一个ChainMap接受多个字典并将它们在逻辑上变为一个字典。然后,这些字典并不是真的合并在一起了,ChainMap类只是在内部创建了一个容纳这些字典的列表并重新定义了一些常见的字典操作来遍历这个列表。大部分字典操作都是可以正常使用的,比如:

>
    >
    >
     len(c)3>
    >
    >
     list(c.keys())['x', 'y', 'z']>
    >
    >
     list(c.values())[1, 2, 3]>
    >
    >
    

如果出现重复键,那么第一次出现的映射值会被返回。因此,例子程序中的c[‘z']总是会返回字典a中对应的值,而不是b中对应的值。

对于字典的更新或删除操作总是影响的是列表中第一个字典。比如:

>
    >
    >
     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等)是非常有用的。事实上,有一些方法可以使它变得简单:

>
    >
    >
     values = ChainMap()>
    >
    >
     values['x'] = 1>
    >
    >
     # Add a new mapping>
    >
    >
     values = values.new_child()>
    >
    >
     values['x'] = 2>
    >
    >
     # Add a new mapping>
    >
    >
     values = values.new_child()>
    >
    >
     values['x'] = 3>
    >
    >
 valuesChainMap({
'x': 3}
, {
'x': 2}
, {
'x': 1}
    )>
    >
    >
     values['x']3>
    >
    >
     # Discard last mapping>
    >
    >
     values = values.parents>
    >
    >
     values['x']2>
    >
    >
     # Discard last mapping>
    >
    >
     values = values.parents>
    >
    >
     values['x']1>
    >
    >
 valuesChainMap({
'x': 1}
    )>
    >
    >
    

作为ChainMap的替代,你可能会考虑使用update()方法将两个字典合并。比如:

>
    >
    >
 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>
    >
    >
    

这样也能行得通,但是它需要你创建一个完全不同的字典对象(或者是破坏现有字典结构)。同时,如果原字典做了更新,这种改变不会反应到新的合并字典中去。比如:

>
    >
    >
     a['x'] = 13>
    >
    >
     merged['x']1

ChianMap使用原来的字典,它自己不创建新的字典。所以它并不会产生上面所说的结果,比如:

>
    >
    >
 a = {
'x': 1, 'z': 3 }
    >
    >
    >
 b = {
'y': 2, 'z': 4 }
    >
    >
    >
     merged = ChainMap(a, b)>
    >
    >
     merged['x']1>
    >
    >
     a['x'] = 42>
    >
    >
     merged['x'] # Notice change to merged dicts42>
    >
    >
    

推荐教程:《Python教程》

以上就是Python 合并多个字典或映射教程的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

展开全文READ MORE
Python 多行匹配模式了解 什么是 Python ?

游客 回复需填写必要信息