2016-05-17 7 views
0

sagen, dass ich zwei Wörterbücher haben:Überprüfung auf ein anderes Wörterbuch Wörterbucheintrag, und fügte hinzu, wenn bestimmte Schlüssel: Wert-Paar in Eintrag

dict1 = [{file:2015a, instrument:NES, gain:23}, {file:2015b, instrument:NES, gain:26}, {file:2015d, instrument:NES, gain:25}] 

dict2= [{file:2015a, instrument:NES, gain:3333}, {file:2015c, instrument:PS2, gain:26}, {file:2015d, instrument:NES, gain:4545}] 

Was ich ist es, alle Wörterbucheinträge von dict2 nehmen zu tun haben, wie Instrument verwenden = PS2 und setze sie in dict1, ignoriere alle anderen Einträge in dict2.

Oder erstellen Sie einfach ein neues Wörterbuch, dict3, das alle Einträge von dict1 enthält, die Instrument: NES und alle Einträge von dict2 haben, die Instrument: PS2 haben.

Was ist der einfachste Weg, dies zu tun?

+1

Sie sind Listen, nicht Wörterbücher .. – heemayl

Antwort

0

Sie sind Wörterbücher in Listen.

>>> dict1=[{'file':'2015a', 'instrument':'NES', 'gain':23}, {'file':'2015b', 'instrument':'NES', 'gain':26}, {'file':'2015d', 'instrument':'NES', 'gain':25}] 
>>> dict2=[{'file':'2015a', 'instrument':'NES', 'gain':3333}, {'file':'2015c', 'instrument':'PS2', 'gain':26}, {'file':'2015d', 'instrument':'NES', 'gain':4545}] 

Sie können filter() über jeder Liste und verketten sie die endgültige Ausgabe wie folgt zu erhalten:

>>> list(filter(lambda x:x['instrument']=='NES', dict1))+list(filter(lambda x:x['instrument']=='PS2', dict2)) 
[{'instrument': 'NES', 'gain': 23, 'file': '2015a'}, {'instrument': 'NES', 'gain': 26, 'file': '2015b'}, {'instrument': 'NES', 'gain': 25, 'file': '2015d'}, {'instrument': 'PS2', 'gain': 26, 'file': '2015c'}] 
>>> 

Hier sind die einzelnen Ausgänge:

>>> list(filter(lambda x:x['instrument']=='NES', dict1)) 
[{'instrument': 'NES', 'gain': 23, 'file': '2015a'}, {'instrument': 'NES', 'gain': 26, 'file': '2015b'}, {'instrument': 'NES', 'gain': 25, 'file': '2015d'}] 
>>> list(filter(lambda x:x['instrument']=='PS2', dict2)) 
[{'instrument': 'PS2', 'gain': 26, 'file': '2015c'}] 
0

Diese sind Listen mit Wörterbüchern als Elementen.

Angenommen, Sie möchten Wörterbücher dict2-dict1 anhängen, wenn der Schlüssel instrument den Wert PS2:

for d in dict2: 
    if d.get('instrument') == 'PS2': 
     dict1.append(d) 

Auf einer anderen Note, sind dict[1-2] nicht gute Namen für Listen.

Beispiel:

In [153]: dict1 = [{'file': '2015a', 'instrument': 'NES', 'gain': '23'}, {'file': '2015b', 'instrument': 'NES', 'gain': 26}, {'file': '2015d', 'instrument': 'NES', 'gain': 25}] 

In [154]: dict2= [{'file': '2015a', 'instrument': 'NES', 'gain': 3333}, {'file': '2015c', 'instrument': 'PS2', 'gain': 26}, {'file': '2015d', 'instrument': 'NES', 'gain': 4545}] 

In [155]: for d in dict2: 
    .....:  if d.get('instrument') == 'PS2': 
    .....:   dict1.append(d) 
    .....:   

In [156]: dict1 
Out[156]: 
[{'file': '2015a', 'gain': '23', 'instrument': 'NES'}, 
{'file': '2015b', 'gain': 26, 'instrument': 'NES'}, 
{'file': '2015d', 'gain': 25, 'instrument': 'NES'}, 
{'file': '2015c', 'gain': 26, 'instrument': 'PS2'}] 
+0

Ha, danke, ja, nur Beispielnamen und falsche Listenelemente. Ich wusste nicht, dass sie Listen waren, macht seit jetzt und viel einfacher in meinem Gehirn zu bewältigen. Vielen Dank! – Adam

0

Zusätzlich zu den oben genannten Antworten könnten Sie auch tun:

tmp_lst = [i for i in dict2 for k,v in i.items() if (k,v)== ('instrument','PS2')] 
print dict1+tmp_lst 

kehrt

[{'instrument': 'NES', 'gain': '23', 'file': '2015a'}, {'instrument': 'NES', 'gain': '26', 'file': '2015b'}, {'instrument': 'NES', 'gain': '25', 'file': '2015d'}, {'instrument': 'PS2', 'gain': 26, 'file': '2015c'}] 
Verwandte Themen