在python中合并两个字典列表?

时间:2016-10-08 16:33:37

标签: python list dictionary

我有两个词典列表:

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>

1 个答案:

答案 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)

工作代码性能不佳