gpt4 book ai didi

python - 如何按键合并多个词典

转载 作者:太空宇宙 更新时间:2023-11-04 08:37:52 25 4
gpt4 key购买 nike

我想获得一个类似联合的多个(3 个或更多)词典的合并字典。

我有什么:

d1 = {'key1': 'x1', 'key2': 'y1', 'key4': 'z1'}
d2 = {'key1': 'x2', 'key2': 'y2', 'key5': 'z2'}
d3 = {'key1': 'x3', 'key3': 'y3', 'key4': 'z3'}

我想得到的:

d_merged = {
'key1' : ('x1', 'x2', 'x3'),
'key2' : ('y1', 'y2', None),
'key3' : (None, None, 'y3'),
'key4' : ('z1', None, 'z3'),
'key5' : (None, 'z2', None)
}

什么是最pythonic/最有效的方法?

我找到了 2 个词典的示例 here ,但是有没有更好的方法(例如:理解)可以解决这里某些词典的丢失关键问题?

有没有办法对任意数量的输入字典进行相同的合并?

最佳答案

生成所有键的并集,然后遍历该并集以收集值:

result = {key: (d1.get(key), d2.get(key), d3.get(key))
for key in d1.keys() | d2.keys() | d3.keys()}

在 Python 3 中,dict.keys()给你一个dictionary view object ,它就像一个集合。您可以使用 | 在这些对象上创建所有字典中所有键的联合。

在 Python 2 中,使用 dict.viewkeys()相反。

演示:

>>> d1 = {'key1': 'x1', 'key2': 'y1', 'key4': 'z1'}
>>> d2 = {'key1': 'x2', 'key2': 'y2', 'key5': 'z2'}
>>> d3 = {'key1': 'x3', 'key3': 'y3', 'key4': 'z3'}
>>> {key: (d1.get(key), d2.get(key), d3.get(key))
... for key in d1.keys() | d2.keys() | d3.keys()}
{'key1': ('x1', 'x2', 'x3'), 'key5': (None, 'z2', None), 'key3': (None, None, 'y3'), 'key4': ('z1', None, 'z3'), 'key2': ('y1', 'y2', None)}
>>> from pprint import pprint
>>> pprint(_)
{'key1': ('x1', 'x2', 'x3'),
'key2': ('y1', 'y2', None),
'key3': (None, None, 'y3'),
'key4': ('z1', None, 'z3'),
'key5': (None, 'z2', None)}

对于字典的任意序列,使用set().union(*dictionaries)tuple() 调用生成器表达式:

dictionaries = (d1, d2, d3)  # or more
result = {key: tuple(d.get(key) for d in dictionaries)
for key in set().union(*dictionaries)}

关于python - 如何按键合并多个词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47451210/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com