gpt4 book ai didi

python - 在 Python 2.7 中合并具有字典列表的字典

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:05 26 4
gpt4 key购买 nike

我正在尝试在 Python 中合并两个 dict ,它们可能相同,也可能信息少得多

例如

master = {"a": 5564, "c": [{"d2":6}]}
daily = { "a": 795, "b": 1337, "c": [{"d1": 2,"d2": 2,"d3": [{"e1": 4,"e2": 4}]}]}

它们需要合并,所以输出是这样的

master = { "a": 6359, "b": 1337, "c": [{"d1": 2,"d2": 8,"d3": [{"e1": 4,"e2": 4}]}]}

虽然我只返回 null,但我试了一下。我可能会遗漏一些东西或者只是路途遥远。我只是想不通。任何帮助都会很棒谢谢。

def merge(master,daily):
for k, v in daily.items():
if isinstance(daily[k],list):
key_check = keyCheck(k, master)
if key_check:
merge(master[k],daily[k])
else :
master[k] = daily[k]
else :
if keyCheck(k, master):
master[k] += daily[k]
else :
master[k] = daily[k]

keyCheck 只检查一个键是否在字典中,所以它不会抛出错误。

最佳答案

这是一个使用 collections.Counter() 的线性函数:

>>> from collections import Counter
>> C2 = Counter(daily)
>>> C1 = Counter(master)
>>>
>>> {k:reduce(lambda x,y : Counter(x)+Counter(y), v) if isinstance(v, list) and k in (C1.viewkeys() & C2) else v for k, v in (C1 + C2).items()}
{'a': 6359, 'c': Counter({'d3': [{'e1': 4, 'e2': 4}], 'd2': 8, 'd1': 2}), 'b': 1337}

首先,您可以将字典转换为 Counter 对象,以便在对计数器求和后添加公共(public)键的值(这就是 Counter 的 add 属性的工作方式),然后您可以遍历项目和存在于两者中的键计数器及其值是列表,您也可以使用 reduce() 函数将相同的算法应用于所有列表项。

如果您的列表包含另一个嵌套的相似数据结构,您可以将此代码转换为递归函数。

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

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