我正在尝试合并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
仅检查字符是否在字典中,因此不会抛出错误。
答案 0 :(得分:5)
这是使用<appSettings>
<add key="CSharpBackendPortNumber" value="num"/>
<add key="CSharpWorkerPath" value="C:\MobiusRelease\samples\CSharpWorker.exe"/>
</appSettings>
:
sparkclr-submit.cmd debug
首先,你可以将你的词典转换为Counter对象,以便在对计数器求和之后添加公共键的值(这就是Counter的add属性的工作原理),然后你可以遍历项目以及两者中存在的键。计数器及其值是列表,您可以使用collections.Counter()
函数将相同的算法应用于所有列表项。
如果您的列表包含另一个嵌套的类似数据结构,则可以将此代码转换为递归函数。
答案 1 :(得分:1)
这是一个递归解决方案。虽然它无法与Kasramvd的答案竞争。
def merge(dic1, dic2):
merged = dict(dic1, **dic2) # Merge dictionaries without adding values. Just exchanging them.
# Similar to .update() but does not override subdicts.
for key in merged:
if key in dic1 and key in dic2:
if isinstance(dic1[key], list):
merged[key] = merge(dic1[key][0], dic2[key][0])
else:
merged[key] = dic1[key] + dic2[key]
return merged