2016-09-04 3 views
-1

Ich habe eine Liste von Strings namens lst, die Namen, Stadt und E-Mail-Adressen für drei Personen in dieser Reihenfolge enthält. Ich habe ein Wörterbuch namens Daten, die nur Schlüssel enthält.Mapping einer Liste als Wörterbuch Werte

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 

data = { 
      "Name": None, 
      "City": None, 
      "email": None 
     } 

I lst Artikel als Werte in Daten abbilden möchten und eine neue Liste von Wörterbüchern, wie unten zu produzieren,

newlst = [{ 
      "Name": "James", 
      "City": "New York", 
      "email": "[email protected]" 
     }, 
     { 
      "Name": "Matt", 
      "City": "San Francisco", 
      "email": "[email protected]" 
     }, 
     { 
      "Name": "Jessica", 
      "City": "Los Angeles", 
      "email": "[email protected]" 
     }] 

Ich weiß, wie einen einzelnen Wert zu einem bestimmten Schlüssel in einem Wörterbuch hinzufügen wie Daten ["Name"] = "James", aber wie würde ich dies erreichen, indem ich list/dict-Verständnis oder Iteration benutze?

Antwort

4

Hier ist es.

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 
newlst = [] 

for i in xrange(0, len(lst), 3): 
    d = {} 
    d['Name'] = lst[i] 
    d['City'] = lst[i+1] 
    d['Email'] = lst[i+2] 

    newlst.append(d) 

print newlst 

Ausgang:

[{'City': 'New York', 'Email': '[email protected]', 'Name': 'James'}, 
{'City': 'San Francisco', 'Email': '[email protected]', 'Name': 'Matt'}, 
{'City': 'Los Angeles', 'Email': '[email protected]', 'Name': 'Jessica'}] 

Mit Verständnis:

lst = ['James','New York','[email protected]','Matt','San Francisco','[email protected]','Jessica','Los Angeles','[email protected]'] 
newlst = [{'Name':lst[i], 'City':lst[i+1], 'Email':lst[i+2]} for i in xrange(0,len(lst),3)] 
+0

Um dieses Python 3 freundlicher zu machen, sollten Sie notieren, dass 'range' * * für Python 3 verwendet wird und' print newlst' => 'print (newlst)' – idjaw

+0

Sie könnten auch ein Paar speichern von Zeilen, und tun 'newlst.append ({'Name': lst [i], 'Stadt': lst [ich], 'E-Mail': lst [i]})' – idjaw

+0

Yup. Das ist richtig @idjaw. – stuartnox

5

Hier ist ein Ansatz Liste Verständnis. Die Idee ist, dass wir ein Wörterbuch erstellen, das auf einem Zip der Schlüssel und drei Werten einer Zeit basiert.

lst = [ 
    'James', 'New York', '[email protected]', 
    'Matt', 'San Francisco', '[email protected]', 
    'Jessica', 'Los Angeles', '[email protected]', 
] 

keys = [ 
    'Name', 
    'City', 
    'email', 
] 

newlst = [ 
    dict(zip(keys, values)) for values in [iter(lst)] * len(keys) 
] 
print(newlst) 

Ausgang:

[ 
    {'City': 'New York', 'Name': 'James', 'email': '[email protected]'}, 
    {'City': 'San Francisco', 'Name': 'Matt', 'email': '[email protected]'}, 
    {'City': 'Los Angeles', 'Name': 'Jessica', 'email': '[email protected]'} 
] 

[iter(lst)] * len(keys) wird aus der Liste zu einem Zeitpunkt, Stücke von 3 Werte zurückgeben. zip(keys, values) erzeugt dann einen Iterator von Tupeln, die einen Schlüssel und einen entsprechenden Wert enthalten. Schließlich wird aus dict() ein Wörterbuch erstellt, das in newlst eingefügt wird. Dies wird so lange wiederholt, bis die Liste erschöpft ist.

Verwandte Themen