开发者

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

目录
  • python多个映射合并为一个映射
  • python合并多个字典或者映射
  • 总结

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

    &nbezegsGEosp;    {'m': 6, 'n': 8, 'y': 4, 'z'ezegsGEo;: 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', 'php;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 }android
b = {'y': 2, 'z': 4 }
merged = dict(b)
merged.update(a)

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜