2017-07-09 8 views
1

私のソリューションは辞書

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])) 

作品罰金のリストを作成しますが、私は少なくとも20000名を持つことになりますので、他のソリューションは、そこにあるので、私はこれを改善する方法を探しています。

Michael Jordan 224567 
Kyle Hynes 294007 
Josef Jones 391107 
+0

FWIWでは、返品や印刷は一切行いません。これは[XY問題](https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のようです。あなたは本当に何を考えているのですか? –

答えて

3

ドゥあなたは本当に辞書が必要ですか? リストnamesにすべてのあなたの「名前」サブリスト

>>> 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

ありがとうございます。_makeさんはここで何をしていますか? – MishaVacic

+0

'namedtuple'の特別なクラスメソッドで、コレクションや他のiterableから新しいインスタンスを生成します。それを名前付きタプルのジェネレータのように考えてください。 [documentation](https://docs.python.org/2/library/collections.html#collections.somenamedtuple._make)で詳細を読むことができますが、_ "Classメソッドから新しいインスタンスを作成するクラスメソッド既存のシーケンスまたはiterable。 " –

1

あなたはこのように、ループ内のリストにあなたの辞書を追加する必要があります:あなたが好む場合

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'}] 

または、リスト内包:

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

場所:なぜ、ちょうどnamedtupleを使用していません。

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) 

出力:

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

パンダが、これはあまりにも簡単になり、その後、あなたは簡単にリストの内包表記を使用することができます。

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) 

ですから、このようなデータフレームを持っています:

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

あなたの名前がファイルに既にある場合は、read_csvが良いだろう。

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