python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python将多个映射合并为一个映射

python如何将多个映射合并为一个映射

作者:yangjiajia123456

ChainMap类是Python中collections模块的一部分,用于将多个字典合并为一个映射,而不会在物理上合并字典,这使得字典中相同的键可以共存,输出结果取决于键的检索顺序,ChainMap通过维护一个底层映射的列表,重定义字典操作来实现这一功能

python多个映射合并为一个映射

我们有时需要将多个字典合并成一个单独的映射结构,但不同的字典之间可能有相同的键,又不想将键覆盖掉,于是可以使用ChainMap类来实现。

它在逻辑上将不同的字典合并为一个单独的映射结构。

from pprint import pprint
from collections import ChainMap

a = {'x': 1, 'y': 2, 'z': 3}
b = {'y': 4, 'z': 5, 'm': 6, 'n': 8}
c = {'m': 6, 'n': 10, 'a': 7, 'b': 0, 'c': 9}

d = ChainMap(a, b, c)
pprint(d)

输出结果

ChainMap({'x': 1, 'y': 2, 'z': 3},
         {'m': 6, 'n': 8, 'y': 4, 'z': 5},
         {'a': 7, 'b': 0, 'c': 9, 'm': 6, 'n': 10})

ChainMap接受多个映射然后在逻辑上表现为一个单独的映射。但是,这些字典并不会在事实上合并在一起。

ChainMap只是简单地维护一个记录底层映射关系的列表,然后重新定义常见的字典操作来扫描这个列表。

print(list(d.keys()))
print(list(d.values()))

每次运行输出的序列的值的顺序都不相同

['x', 'n', 'a', 'm', 'y', 'b', 'c', 'z']
[1, 8, 7, 6, 2, 0, 9, 3]
.
.
.
['a', 'x', 'm', 'y', 'n', 'z', 'b', 'c']
[7, 1, 6, 2, 8, 3, 0, 9]

如果有重复的键,那么会输出第一个查到的键。

print(d['n'])

8

python合并多个字典或者映射

python 中很多时候会用到合并多个字典

首先我们介绍一个collections模块中的ChairMap类

from collections import ChainMap
a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
c = ChainMap(a,b)

如果模块中的键是相同的 会返回第一个值 , 因为是映射 ,所以对它的操作都会对原数组有操作。

如果不想改变原来数组可以使用python 中的update()

a = {'x': 1, 'z': 3 }
b = {'y': 2, 'z': 4 }
merged = dict(b)
merged.update(a)

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文