Python 从键列表和多个值列表创建字典列表

Python 从键列表和多个值列表创建字典列表,python,list,dictionary,Python,List,Dictionary,我的解决方案 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, name

我的解决方案

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个名称,所以我正在研究如何改进这一点。

您应该将词典附加到循环内的列表中,如下所示:

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'}]
   FirstName  LastName   ID
0   Michael   Jordan  224567
1      Kyle    Hynes  294007
2     Josef    Jones  391107

或者,如果您愿意,可以列出:

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

你真的需要一本字典吗?为什么不直接使用:

将所有“名称”子列表放入父列表
名称
。然后您可以轻松使用列表理解:

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

熊猫让这太容易了

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)
因此,您将拥有如下数据帧:

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'}]
   FirstName  LastName   ID
0   Michael   Jordan  224567
1      Kyle    Hynes  294007
2     Josef    Jones  391107
如果你的名字已经在一个文件中,读csv会更好

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

FWIW,你从不归还或打印任何东西。这似乎是一个错误。你真正想要什么?谢谢。你在这里做什么?这是一个名为tuple的特殊类方法,它从集合或其他iterable生成新实例。将其视为命名元组的生成器。您可以在上阅读更多内容,尽管它只是声明“从现有序列或iterable生成新实例的类方法”