2017-06-30 6 views
-4

I 2 Python Liste der Wörterbücher haben:Python Liste der Wörterbücher von Loops (aktualisiert)

[ 
    {'index':'1','color':'red'}, 
    {'index':'2','color':'blue'}, 
    {'index':'3','color':'green'} 
] 

und

[ 
    {'device':'1','name':'x'}, 
    {'device':'2','name':'y'}, 
    {'device':'3','name':'z'} 
] 

Wie kann ich jeden Wörterbuch aus der zweiten Liste in die erste Liste anhängen so wie um einen Ausgang wie zu erhalten:

[ 
    {'device':'1','name':'x','index': '1', 'color': 'red'}, 
    {'device':'1','name':'x','index': '2', 'color': 'blue'}, 
    {'device':'1','name': 'x','index': '3', 'color': 'green'} 
    {'device':'2','name':'y''index': '1', 'color': 'red'}, 
    {'device':'2','name':'y','index': '2', 'color': 'blue'}, 
    {'device':'2','name':'y','index': '3', 'color': 'green'} 
    {'device':'3','name':'z','index': '1', 'color': 'red'}, 
    {'device':'3','name':'z','index': '2', 'color': 'blue'}, 
    {'device':'3','name':'z','index': '3', 'color': 'green'} 
] 
+2

wo tat die 'Gerät'-Taste geht auf die 2. und 3. Diktate in den resultierenden Listen? –

+0

Warum gibt es insgesamt 6 Wörterbücher in der Eingabe und 9 in der Ausgabe? einige der Wörterbücher erschienen zusammengefügt, aber der Geräteschlüssel befindet sich nur in einem der Ausgabewörterbücher? – citizen2077

+2

Warum ist die Ausgabe eine "Liste von Listen"? –

Antwort

1

Wenn Sie nur die resultierenden Wörterbücher drucken möchten, entfernen Sie das Kommentarzeichen (und kommentieren Sie die folgenden 2).

d1 = [ 
    {'index':'1','color':'red'}, 
    {'index':'2','color':'blue'}, 
    {'index':'3','color':'green'} 
] 

d2 = [ 
    {'device':'1','name':'x'}, 
    {'device':'2','name':'y'}, 
    {'device':'3','name':'z'} 
] 


result_list = [] 
for dict1 in d1: 
    merged_dict = dict1.copy() 
    for dict2 in d2: 
     merged_dict.update(dict2) 
#  print(merged_dict) 
     result_list.append(merged_dict.copy()) 

print(result_list) 

Das Ergebnis:

[{ 'name': 'x', 'Gerät': '1', 'Farbe': 'rot', 'Index': '1'} ,
{'Name': 'y', 'Gerät': '2', 'Farbe': 'rot', 'Index': '1'},
{'Name': 'z', 'Gerät ':' 3 ',' color ':' rot ',' index ':' 1 '},
{' name ':' x ',' device ':' 1 ',' color ':' blau ', 'index': '2'},
{'name': 'y', 'gerät': '2', 'farbe': 'blau', 'index': '2'},
{'Name': 'z', 'Gerät': '3', 'Farbe': 'blau', 'Index': '2'},
{'Name': 'x', 'Gerät': '1', 'color': 'grün', 'index': '3'},
{'name': 'y', 'device': '2', 'color': 'grün', 'index ': '3'},
{' name ': 'z', 'Gerät': '3', 'Farbe': 'grün', 'Index': '3'}]

-1

Wenn Sie wollen einfach nur mit der N-ten dict o nördl-ten dict der ersten Liste fusionieren f der zweiten Liste können Sie etwas tun:

a = [ 
    {'index':'1','color':'red'}, 
    {'index':'2','color':'blue'}, 
    {'index':'3','color':'green'} 
] 

b = [ 
    {'device':'1','name':'x'}, 
    {'device':'2','name':'y'}, 
    {'device':'3','name':'z'} 
] 

def merge(x,y): 
    z = x.copy() 
    z.update(y) 
    return z 

>>> [merge(x,y) for x,y in zip(a,b)] 

[{'color': 'red', 'device': '1', 'index': '1', 'name': 'x'}, 
{'color': 'blue', 'device': '2', 'index': '2', 'name': 'y'}, 
{'color': 'green', 'device': '3', 'index': '3', 'name': 'z'}] 

merge(x,y) ist eine Hilfsfunktion, die ein einziges Wörterbuch mit allen Inhalten von x und y zurückgibt.

zip(a,b) gibt eine Liste von Tupeln zurück, wobei das erste Element jedes Tupels ein Element von a und das zweite Element ein Element von b ist. Dies ermöglicht es, List Comprehensions auf zwei Listen parallel zu verwenden.

+0

Warum antworten Sie das? OP hat die exakt gleiche Frage vor 16 Stunden gepostet (was beantwortet wurde). Das Beantworten offensichtlicher Betrüger fördert nur dieses Verhalten. – That1Guy

+0

es ist eigentlich nicht die gleiche Frage, die Ausgabe ist anders –

Verwandte Themen