我有两个词典列表:
old = [{'a':'1','b':'2'},{'a':'2','b':'3'},{'a':'3','b':'4'},{'a':'4','b':'5'}]
new = [{'a':'1','b':'100'},{'a':'2','b':'100'},{'a':'5','b':'6'}]
如何合并两个词典列表:
update = [{'a':'1','b':'2,100'},{'a':'2','b':'3,100'},{'a':'3','b':'4'},{'a':'4','b':'5'},{'a':'5','b':'6'}]
这个想法是,如果新的'a'不是旧的,添加它,如果新的'a'在旧的,更新'b',如果旧的'a'不在新的,保留它。 / p>
答案 0 :(得分:0)
如果'a'是真正的键,b是值,那么将dicts列表转换为一个dict会更容易,处理合并然后将其转换回来。这样您就可以使用标准函数。
转换为一个dict,其中a是关键:
def intoRealDict(listOfDicts):
values = []
for item in listOfDicts:
values.append((item.get('a'), item.get('b')))
return dict(values) #Use Dict Constructur ('3', '4) -> {'3': '4'}
再次转换为数据结构:
def intoTheDataStructure(realDict):
res = []
for i in realDict:
res.append(dict([('a', i), ('b', realDict[i])]))
return res
轻松合并两个列表:
def merge(l1, l2):
d1, d2 = intoRealDict(l1), intoRealDict(l2)
for i in d2:
if i in d1:
#extend "b"
d1[i] = d1[i] + ", " + d2[i]
else:
#append value of key i
d1[i] = d2[i]
return intoTheDataStructure(d1)
工作代码性能不佳