我有4个列表,其中元素是一对一映射的。有数万个元素。我想创建一个dict,为每个元素提供4个属性,然后我想将这些dicts放入列表中。 (我的最终目标是创建一个pandas DataFrame并将其另存为HDF5文件。)
是否有一种简单的内存效率方法来执行此操作,可能使用zip()和dict()而不是for循环?
作为Python的一个工作示例,请考虑:
list1 = ['obj1','obj2','obj3']
list2 = ['cat','dog','tree']
list3 = [7,8,9]
list4 = ['red','green','blue']
所以我的想法是,我最终想要一个的词典列表
[{'obj':'obj1','type':'cat','num':7,'color':'red'},
{'obj':'obj2','type':'dog','num':8,'color':'green'},
{'obj':'obj3','type':'tree','num':9,'color':'blue'}]
答案 0 :(得分:5)
由于您使用pandas
to_dict
pd.DataFrame({'obj':list1,'type':list2,'num':list3,'color':list4}).to_dict('r')
Out[1204]:
[{'color': 'red', 'num': 7, 'obj': 'obj1', 'type': 'cat'},
{'color': 'green', 'num': 8, 'obj': 'obj2', 'type': 'dog'},
{'color': 'blue', 'num': 9, 'obj': 'obj3', 'type': 'tree'}]
答案 1 :(得分:3)
这是一个非熊猫选项:
data = zip(list1, list2, list3, list4)
keys = ['obj', 'type', 'num', 'color']
list_of_dicts = [dict(zip(keys, i)) for i in data]
答案 2 :(得分:1)
而不是列出dict
dict
的<{1}}
import pandas as pd
import numpy as np
list1 = ['obj1','obj2','obj3']
list2 = ['cat','dog','tree']
list3 = [7,8,9]
list4 = ['red','green','blue']
pd.DataFrame(np.array([list1, list2, list3, list4])).to_dict()
答案 3 :(得分:1)
由于它使用了每个列表中的相应元素(输出列表的第一个字典是来自每个输入列表的第一个元素)并假设所有列表具有相同的大小,因此使用list comprehension
可能是另一种方式:
[{'obj':list1[i], 'type':list2[i],
'num':list3[i], 'color':list4[i]} for i in range(len(list1))]