2017-07-09 7 views
1

Meine Lösungeine Liste der Wörterbücher

keys = ['FirstName', 'LastName', 'ID'] 

name1 = ['Michael', 'Jordan', '224567'] 
name2 = ['Kyle', 'Hynes', '294007'] 
name3 = ['Josef', 'Jones', '391107'] 

dictList = [] 
dictList.append(dict(zip(keys, name1))) 
dictList.append(dict(zip(keys, name2))) 
dictList.append(dict(zip(keys, name3))) 

for item in dictList: 
    print(' '.join([item[key] for key in keys])) 

funktioniert gut, aber gibt es eine andere Lösung, weil ich mindestens 20.000 Namen hat, so dass ich bin auf der Suche, wie diese zu verbessern.

Michael Jordan 224567 
Kyle Hynes 294007 
Josef Jones 391107 
+0

FWIW, Sie geben nie zurück oder drucken nichts. Dies scheint ein [XY-Problem] zu sein (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Was hast du wirklich vor? –

Antwort

3

Do brauchst du wirklich ein Wörterbuch? Warum nicht einfach eine namedtuple verwenden:

>>> from collections import namedtuple 
>>> Employee = namedtuple('Employee', 'FirstName, LastName, ID') 
>>> names_list = [['Michael', 'Jordan', '224567'], ['Kyle', 'Hynes', '294007'], ['Josef', 'Jones', '391107']] 
>>> employee_list = map(Employee._make, names_list) 
>>> employee_list[0].FirstName 
'Michael' 
>>> pprint(employee_list) 
[Employee(FirstName='Michael', LastName='Jordan', ID='224567'), 
Employee(FirstName='Kyle', LastName='Hynes', ID='294007'), 
Employee(FirstName='Josef', LastName='Jones', ID='391107')] 
+0

Danke. Was macht _make hier? – MishaVacic

+0

Es ist eine spezielle Klassenmethode von 'namedtuple', die neue Instanzen aus einer Sammlung oder anderen iterablen erzeugt. Betrachten Sie es als Generator von benannten Tupeln. Sie können mehr in der [Dokumentation] (https://docs.python.org/2/library/collections.html#collections.somenametuple._make) lesen, obwohl es nur _ _ Klassenmethode angibt, die eine neue Instanz aus einem erstellt bestehende Sequenz oder iterierbar. "_ –

1

Sie sollten Ihre Wörterbücher zur Liste innerhalb einer Schleife, wie dies anfügen:

In [1152]: names = [name1, name2, name3] 

In [1153]: d = [] 

In [1154]: for name in names: 
     ...:  d.append(dict(zip(keys, name))) 
     ...:  

In [1155]: d 
Out[1155]: 
[{'FirstName': 'Michael', 'ID': '224567', 'LastName': 'Jordan'}, 
{'FirstName': 'Kyle', 'ID': '294007', 'LastName': 'Hynes'}, 
{'FirstName': 'Josef', 'ID': '391107', 'LastName': 'Jones'}] 

Oder, wenn Sie es vorziehen, eine Liste Verständnis:

In [1160]: d = [dict(zip(keys, name)) for name in names] 

In [1161]: d 
Out[1161]: 
[{'FirstName': 'Michael', 'ID': '224567', 'LastName': 'Jordan'}, 
{'FirstName': 'Kyle', 'ID': '294007', 'LastName': 'Hynes'}, 
{'FirstName': 'Josef', 'ID': '391107', 'LastName': 'Jones'}] 
1

Legen Sie alle Ihre "name" Teil-Listen in die Eltern Liste names. Dann können Sie leicht Liste Verständnis verwenden:

keys = ['FirstName', 'LastName', 'ID'] 
names = [ 
    ['Michael', 'Jordan', '224567'], 
    ['Kyle', 'Hynes', '294007'], 
    ['Josef', 'Jones', '391107'] 
] 

dictList = [{k:v for k,v in zip(keys, n)} for n in names] 
print(dictList) 

Der Ausgang:

[{'FirstName': 'Michael', 'LastName': 'Jordan', 'ID': '224567'}, {'FirstName': 'Kyle', 'LastName': 'Hynes', 'ID': '294007'}, {'FirstName': 'Josef', 'LastName': 'Jones', 'ID': '391107'}] 
0

Pandas macht dies zu einfach.

import pandas as pd 

keys = ['FirstName', 'LastName', 'ID'] 
name1 = ['Michael', 'Jordan', '224567'] 
name2 = ['Kyle', 'Hynes', '294007'] 
name3 = ['Josef', 'Jones', '391107'] 

doc_list = [name1,name2,name3] 
df = pd.DataFrame(doc_list,columns = keys) 

So finden Sie eine Datenrahmen wie dieses:

FirstName LastName ID 
0 Michael Jordan 224567 
1  Kyle Hynes 294007 
2  Josef Jones 391107 

Wenn Ihre Namen bereits in einer Datei sind, würden read_csv besser sein.

pd.read_csv("file_name.csv",header=keys)//remove the header parameter if it is present in your csv. 
Verwandte Themen