簡體   English   中英

從一個鍵列表和多個值列表創建字典列表

[英]Create a list of dictionaries from a list of keys and multiple lists of values

我的解決方案

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

工作正常,但有沒有其他解決方案,因為我至少有 20000 個名字,所以我正在尋找如何改進它。

將所有“名稱”子列表放入列表names中。 然后你可以輕松地使用列表理解:

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

你真的需要字典嗎? 為什么不只使用namedtuple

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

熊貓讓這太容易了。

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.

您應該將字典附加到循環內的列表中,如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM