2016-04-14 4 views
2

Ich habe 2 Listen und möchte sie als Liste von Wörterbüchern zusammenführen. Der Code, den ich habe:Listen effizient in eine Liste von Wörterbüchern zusammenführen

import pprint 

list1 = [1, 2, 3, 4] 
list2 = [0, 1, 1, 2] 
newlist = [] 
for i in range(0, len(list1)): 
    newdict = {} 
    newdict["original"] = list1[i] 
    newdict["updated"] = list2[i] 
    newlist.append(newdict) 
pprint.pprint(newlist) 

Ausgang:

[{'original': 1, 'updated': 0}, 
{'original': 2, 'updated': 1}, 
{'original': 3, 'updated': 1}, 
{'original': 4, 'updated': 2}] 

Gibt es einen besseren oder schnelleren Weg, dies zu tun?

Antwort

12

Sie können Ihre zwei Listen zip und dann eine Liste Verständnis verwenden, wo Sie Ihr Wörterbuch als jedes Element in der Liste erstellen:

list1=[1,2,3,4] 
list2=[0,1,1,2] 

new_list = [{'original': v1, 'updated': v2} for v1, v2 in zip(list1, list2)] 

print(new_list) 

Ausgang:

[{'updated': 0, 'original': 1}, {'updated': 1, 'original': 2}, {'updated': 1, 'original': 3}, {'updated': 2, 'original': 4}] 
0

Sie auch über laufen könnten beide Listen bei jedem Index mit einem Listenverständnis. Dies führt zu einem Indexfehler, wenn list1 größer als list2 ist. Wer weiß, ob Zip schneller ist?

newlist = [{"original":list1[i],"updated":list2[i]} for i in range(len(list1))] 
+0

Nein, der Zip-Ansatz ist langsamer. – Natecat

0

Die Antwort, die von Idjaw zur Verfügung gestellt wird, nagelt es in einer sehr pythonischen Weise. Es ist ein alternativer Ansatz mit dem Namen Tupeln:

from collections import namedtuple 
from itertools import izip 
ListCompare = namedtuple('ListCompare', ['original', 'updated']) 
L1 = [1,2,3,4] 
L2 = [0,1,1,2] 
comp = [ListCompare(a, b) for a,b in izip(L1, L2)] 
print comp[1].original, comp[1].updated 

2 1 

Named Tupeln besser durchführen soll (das heißt weniger Overhead) als Wörterbücher, wenn die Listen sind lang. Aber ich würde diese weniger bekannte Alternative erwähnen. Beachten Sie, dass dieser Code für Python 2.7 gilt, für Python 3 müssen kleinere Anpassungen vorgenommen werden.

Verwandte Themen