【发布时间】:2015-01-22 11:50:27
【问题描述】:
我正在努力解决递归合并问题。
假设我有:
a=[{'name':"bob",
'age':10,
'email':"bob@bla",
'profile':{'id':1, 'role':"admin"}},
{'name':"bob",
'age':10,
'email':"other mail",
'profile':{'id':2, 'role':"dba"},
'home':"/home/bob"
}]
我需要一些东西来递归地合并条目。如果同一级别上现有给定键的值不同,则将值附加到数组中。
b = merge(a)
print b
{'name':"bob",
'age':10,
'email':["bob@bla","other mail"],
'profile':{'id':[1,2], 'role'=["admin", "dba"], 'home':"/home/bob"}
我写了这段代码:
def merge(items):
merged = {}
for item in items:
for key in item.keys():
if key in merged.keys():
if item[key] != merged[key]:
if not isinstance(merged[key], list):
merged[key] = [merged[key]]
if item[key] not in merged[key]:
merged[key].append(item[key])
else:
merged[key] = item[key]
return merged
输出是:
{'age': 10,
'email': ['bob@bla', 'other mail'],
'home': '/home/bob',
'name': 'bob',
'profile': [{'id': 1, 'role': 'admin'}, {'id': 2, 'role': 'dba'}]}
这不是我想要的。
我不知道如何处理递归。
谢谢:)
【问题讨论】:
-
你的代码在哪里,它到底有什么问题?
-
正如我所说,我正在努力解决这个问题......
-
所以你……什么都没有?这不是代码编写服务。
-
好吧,其他几个主题也没有提供任何代码,我正在自己做一些事情,如果我能做到,我会发布它......我正在寻找建议.
标签: python arrays recursion dictionary merge