gpt4 book ai didi

python - 将字典合并到列表字典中

转载 作者:太空宇宙 更新时间:2023-11-03 12:37:45 24 4
gpt4 key购买 nike

我有三个字典:

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 3, 'c': 4}
dict3 = {'c': 4, 'd': 4}

我想将它们“合并”到列表字典中

merged_dict = {'a':[1, np.nan, np.nan],
'b':[2, 3, np.nan],
'c':[3, 4, 4],
'd':[np.nan, np.nan, 4]}

某些字典中有键,而其他字典中没有,这使得循环有点痛苦。想知道最干净的方法是什么。

最佳答案

如评论中所述,您需要先遍历所有字典以收集所有键,否则无法知道每个字典中缺少哪些键。然后你可以用字典理解构建 merged_dict

import numpy as np

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'b': 3, 'c': 4}
dict3 = {'c': 4, 'd': 4}

all_dicts = (dict1, dict2, dict3)

keys = {k for d in all_dicts for k in d}
merged_dict = {k: [d.get(k, np.nan) for d in all_dicts] for k in keys}
print(merged_dict)

输出

{'a': [1, nan, nan], 'b': [2, 3, nan], 'c': [3, 4, 4], 'd': [nan, nan, 4]}

可以将集合推导式放入字典推导式中,但我认为这会使代码更难阅读。

merged_dict = {k: [d.get(k, np.nan) for d in all_dicts] 
for k in {k for d in all_dicts for k in d}}

实际上,set comp 中的双 for 循环并不是那么有效。对于小的指令可能无关紧要,但如果指令很大,使用 set.update 方法以 C 速度执行其中一个循环会更有效:

keys = set()
for d in all_dicts:
keys.update(d.keys())

这可能更好:

keys = set().union(*all_dicts)

谢谢,丹。 D 代表那个建议!

还有另一种方法,使用 itertools:

from itertools import chain
keys = set(chain.from_iterable(dicts))

关于python - 将字典合并到列表字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40826350/

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