用4个键创建字典,从列表中分配值

时间:2018-11-09 23:08:02

标签: python python-3.x pandas list dictionary

我有一个包含400多个项目的列表,但是我最终需要将其解析为4列的熊猫数据框。因此,我认为最好对列表进行转换,以便4个项目中的每一个都从列表中获得适当的值。

list = ['1','ABC','ABC001,'ABC002,'2','ABC','ABC001','ABC003','3','DEF','DEF001','DEF001']

我想制作一个类似于以下内容的字典:

Dict = {'Id' : '1', 'TopSite' : 'ABC', 'Floor' : 'ABC001', 'Room' : 'ABC002', 'Id' : '2'.... }

所以我尝试了以下操作:

columns = ['Id', 'TopSite', 'Floor', 'Room']
list = ['1','ABC','ABC001,'ABC002,'2','ABC','ABC001','ABC003','3','DEF','DEF001','DEF001']
DataDict = [dict(zip(columns, regionDataList))]

问题在于它只给了我字典列表中的前4个项目。

1 个答案:

答案 0 :(得分:0)

您只是缺少遍历列表的步骤,因此您可以对与列数相对应的每个项目块重复k(假设您真正想要的是字典列表-有点与示例输出不同)。像这样:

dict(zip(...))

当然,如果您的目标是转换为数据框,则实际上不需要临时步骤。您可以通过将列列表作为参数以及项目列表的分块版本传递来到达那里。例如:

cols = ['Id', 'TopSite', 'Floor', 'Room']
items = ['1','ABC','ABC001','ABC002','2','ABC','ABC001','ABC003','3','DEF','DEF001','DEF001']

results = [dict(zip(cols, items[i:i + len(cols)])) for i in range(0, len(items), len(cols))]

print(results)
# OUTPUT
# [{'Id': '1', 'TopSite': 'ABC', 'Floor': 'ABC001', 'Room': 'ABC002'}, {'Id': '2', 'TopSite': 'ABC', 'Floor': 'ABC001', 'Room': 'ABC003'}, {'Id': '3', 'TopSite': 'DEF', 'Floor': 'DEF001', 'Room': 'DEF001'}]

顺便说一句,如果您使用变量处理import pandas as pd cols = ['Id', 'TopSite', 'Floor', 'Room'] items = ['1','ABC','ABC001','ABC002','2','ABC','ABC001','ABC003','3','DEF','DEF001','DEF001'] chunks = [items[i:i + len(cols)] for i in range(0, len(items), len(cols))] df = pd.DataFrame(chunks, columns=cols) print(df) # OUTPUT # Id TopSite Floor Room # 0 1 ABC ABC001 ABC002 # 1 2 ABC ABC001 ABC003 # 2 3 DEF DEF001 DEF001 位,而不是在一遍又一遍地运行它们,那么对于大型列表,这两个示例都将运行得更快。