2017-01-22 7 views
0

Ich mache einige Scrip mit Python und mit einer kleinen Frage.Python - Zip 2 Listen in 1 Wörterbuch

Ich habe 2 Listen:

  1. ['name', 'age', 'sex', 'addr', 'city']

  2. ['Jack 24 male no23 NY', 'Jane 25 female no24 NY', 'Dane 14 male no14 NY']

So haben ich will:

dictofJack = {'name': 'Jack', 'age': '24', 'sex': 'male', 'addr': 'no23', 'city':'NY'} 

dictofJane = {'name': 'Jane', 'age': '25', 'sex': 'female', 'addr': 'no24', 'city':'NY'} 

dictofDane = {'name': 'Dane', 'age': '14', 'sex': 'male', 'addr': 'no14', 'city':'NY'} 

In diesem cas Wie kann ich zip verwenden, um die Wörterbücher automatisch in eine for-Schleife zu bringen?

+1

Mögliche Duplikate von [Mappe zwei Listen in ein Wörterbuch in Python] (http://stackoverflow.com/questions/209840/map-two-lists-into-a-dictionary-in-python) –

+1

Wollen Sie ein Liste von Dictionari es? –

Antwort

5

Mit list comprehension oder generator expression:

>>> header = ['name', 'age', 'sex', 'addr', 'city'] 
>>> values = ['Jack 24 male no23 NY', 
       'Jane 25 female no24 NY', 
       'Dane 14 male no14 NY'] 
>>> dictofJack, dictofJane, dictofDane = (
     dict(zip(header, value.split())) for value in values 
    ) 
>>> dictofJack 
{'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'} 
>>> dictofJane 
{'addr': 'no24', 'age': '25', 'city':'NY', 'name': 'Jane', 'sex': 'female'} 
>>> dictofDane 
{'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Dane', 'sex': 'male'} 

BTW, anstelle von mehreren Variablen der Wörterbücher zu machen, empfehle ich Wörterbuch der Wörterbücher zu verwenden (man denke an Fall, in dem 100 der Wörterbücher erforderlich), mit dictionary comprehension:

>>> {value.split()[0]: dict(zip(header, value.split())) for value in values} 
{'Jane': {'addr': 'no24', 'age': '25', 'city': 'NY', 'name': 'Jane', 'sex': 'female'}, 
'Dane': {'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Dane', 'sex': 'male'}, 
'Jack': {'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'}} 
+1

@ TigerhawkT3, Vielen Dank für die Korrektur :) – falsetru

+0

Wie wäre es mit dem Fall, wenn 2 Personen den gleichen Namen haben? –

+0

Ich habe diesen Fall: header = ['Name', 'Alter', 'Geschlecht', 'Addr', 'Stadt'] Werte = ['Jack 24 männlich no23 NY', 'Jane 25 weiblich no24 NY ', ' Jane 14 männlich no14 NY '] print {Wert.split() [0]: dict (zip (header, value.split())) für Wert in den Werten} Es wird so gedruckt: {'Jane': {'addr': 'no14', 'Alter': '14', 'Stadt': 'NY', 'Name': 'Jane', 'Geschlecht': 'männlich'}, 'Jack ': {' addr ':' no23 ',' Alter ':' 24 ',' Stadt ':' NY ',' Name ':' Jack ',' Geschlecht ':' männlich '}} Also wie können wir das lösen? –

Verwandte Themen