2017-02-25 3 views
0

Wenn ich zwei verschiedene Wörterbücher habe ich von Abfragen unterschiedlicher GrößeMerging zwei Wörterbücher in verschiedenen Größen und unterschiedliche Werte

dictionary1: 
{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3} 

dictionary2: 
{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3} 

ursprünglich erstellt habe, habe ich eine Masterliste aus diesen beiden Wörterbücher:

List = [] 
for i in dictionary1: 
for j in dictionary2: 
    if i['id'] = j['id]: 
     List.append[i['id'],i['passCount'],j['failCount']] 
    else: 
     List.append[i['id'],i['passCount'],0] 
     List.append[j['id'],0, j['failCount'] 
return List 

Wenn ich diese Liste für meine Daten ausdrucken würde, würde ich nur eine Liste der übereinstimmenden IDs erhalten und die anderen nicht berücksichtigen.

Aus diesem Grund habe ich ein Wörterbuch drucken möchten, wo ich es zu löschen, ohne jede der

von id

Dank

+0

der Struktur enthalten 'dictionary1',' dictionary2' ist ungültig – RomanPerekhrest

Antwort

0

Short-Lösung und dict.setdefaultdict.update Methoden:

l1 = [{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3}] 
l2 = [{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3}] 

grouped = {} 
for d in l1+l2: 
    grouped.setdefault(d['id'], {'failCount':0, 'passCount': 0}).update(d) 

result = [d for d in grouped.values()] 
print(result) 

Der Ausgang:

[{'passCount': 3, 'id': 1, 'failCount': 1}, {'passCount': 4, 'id': 2, 'failCount': 0}, {'passCount': 0, 'id': 3, 'failCount': 2}, {'passCount': 7, 'id': 5, 'failCount': 3}, {'passCount': 3, 'id': 6, 'failCount': 0}] 
+0

nur unglücklicher Teil ist, dass für 'id': 3, der 'passCount' sollte 'passCount' = 0 statt sein es nicht da – Draklin

+0

@Draklin, kein Problem, siehe mein Update – RomanPerekhrest

+0

Vielen Dank! Arbeit ist wie ein Charme – Draklin

0

Vielleicht sind sie zwei verschiedene

{'id' = 1, 'passCount' = 3, 'failCount' = 1}, {'id': 2 , 'passCount': 4, 'failCount' = 0}... und so weiter zu drucken bekommen könnte Listen, nicht Wörterbücher, so nehme ich an, sie sind zwei Listen:

failCount standardmäßig auf 0 gesetzt, können Sie dies versuchen:

a=[{'id': 1 , 'passCount': 3}, {'id': 2 , 'passCount': 4}, {'id': 5 , 'passCount': 7}, {'id': 6, 'passCount': 3}] 
b=[{'id': 1 , 'failCount': 1}, {'id': 3 , 'failCount': 2}, {'id': 5 , 'failCount': 3}] 

for j in a: 
    j.update({'failCount': 0}) 
    for i in b: 
     if i["id"]==j["id"]: 
      j.update(i) 

print(a) 

Output:

[{'id': 1, 'passCount': 3, 'failCount': 1}, {'id': 2, 'passCount': 4, 'failCount': 0}, {'id': 5, 'passCount': 7, 'failCount': 3}, {'id': 6, 'passCount': 3, 'failCount': 0}] 
+0

Gibt es eine Möglichkeit, sagen wir mal, es gibt kein 'failCount' für diese spezifische ID, um es willkürlich auf 0 zu setzen? und ausdrucken {'id': 2, 'passCount': 4, 'failCount': 0} – Draklin

Verwandte Themen