2016-10-08 6 views
0

У меня есть два списка словарей:объединить два списка словарей в python?

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» находится в старом, обновите «b», и если старый «a» не находится в новом, сохраните его.

+1

Вы что-то пробовали? Покажите предыдущие попытки – Li357

+0

В значениях обновленного списка вы хотите определить «2» и «100»? Словарь Python не позволяет использовать несколько значений для одного и того же ключа, насколько я знаю. То, что вы показываете, просто добавляет две строки значений, и вы не сможете использовать значения позже. – Peaceful

+0

Вы хотите форматировать b как строку, разделенную запятой, или какую-то подходящую структуру данных. I. список для значения b? –

ответ

0

Если «a» здесь является реальным ключом, а значение b, то было бы проще преобразовать список dicts в один dict, обработать слияние и затем преобразовать его обратно. Таким образом, вы можете использовать стандартные функции.

Преобразование в один Словарь где ключ:

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 

Easy Merge ваших двух списков:

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) 

Рабочих Код с плохими характеристиками

Смежные вопросы