2016-10-08 2 views
0

Ich habe zwei Listen der Wörterbücher:zwei Listen von Wörterbüchern in Python zusammenführen?

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'}] 

Wie kann ich Zusammenführen von zwei Listen der Wörterbücher zu bekommen:

update = [{'a':'1','b':'2,100'},{'a':'2','b':'3,100'},{'a':'3','b':'4'},{'a':'4','b':'5'},{'a':'5','b':'6'}] 

die Idee ist, wenn neue ‚a‘ nicht in der alten ist, fügen Sie es und wenn das neue 'a' im alten ist, update 'b' und wenn alt 'a' nicht im neuen ist, behalte es.

+1

Hast du irgendwas probiert? Bitte zeigen Sie frühere Versuche an – Li357

+0

Möchten Sie in den aktualisierten Listenwerten sagen '2' und' 100'? Python-Wörterbücher erlauben meines Wissens nicht mehrere Werte für den gleichen Schlüssel. Was Sie zeigen, fügt einfach zwei Wertstrings hinzu und Sie können die Werte möglicherweise später nicht mehr verwenden. – Peaceful

+0

Möchten Sie die bs als kommagetrennte Zeichenfolge oder eine geeignete Datenstruktur formatieren, zB eine Liste für den b-Wert? –

Antwort

0

Wenn 'a' hier der echte Schlüssel ist und b der Wert, dann wäre es einfacher, die Liste der Dicts in ein dict zu konvertieren, die Zusammenführung zu verarbeiten und dann zurück zu konvertieren. Auf diese Weise können Sie die Standardfunktionen verwenden.

Konvertieren in ein dict, wo eine der Schlüssel:

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'} 

der Datenstruktur Konvertieren in wieder:

def intoTheDataStructure(realDict): 
    res = [] 
    for i in realDict: 
     res.append(dict([('a', i), ('b', realDict[i])])) 
    return res 

Einfache Merge Ihrer zwei Listen:

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) 

Arbeits Code mit schlechter Leistung

Verwandte Themen