将4个一对一映射列表转换为dicts列表(python)

时间:2017-12-22 20:20:02

标签: python pandas numpy dictionary dataframe

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

4 个答案:

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