首页 > 解决方案 > 创建一个包含 4 个键的字典,从列表中分配值

问题描述

我有一个包含 400 多个项目的列表,但我最终需要将其解析为具有 4 列的 pandas 数据框。所以我认为最好转换列表,以便 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 个项目。

标签: pythonpython-3.xpandaslistdictionary

解决方案


您只是缺少一个遍历列表的步骤,因此您可以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

len(...)顺便说一句,如果您使用变量处理位而不是在推导式中一遍又一遍地运行它们,那么对于大型列表,这两个示例都将运行得更快。


推荐阅读