python - 针对列表中的元素创建多个字典
问题描述
我有一个列表,如下所示:
dl = [['Part Number', 'W501', 'W502', 'W503', 'W504', 'W505', 'W506', 'W507'],
['Weight (Kgs) *', 1.653, 0.14, 0.1, 0.11, 0.11, 1.19, 0.71],
['Volume Month *', 2000, 2000, 2000, 2000, 2000, 2000, 2000],
['Emitter Name', 'Foo'],
['Emitter Location', 'Manesar'],
['Contact person Name', 'bar'],
['Designation', 'Project'],
['Contact Number', '123456'],]
如何n
根据最大列表中的元素减去 1 创建字典数量。例如,这里n
是 7。
如果列表的长度为 2,那么它的元素应该在每个字典中。键是列表的第一个元素,以下是值。
预期输出:
p1 = {'Part Number':'W501', 'Weight (Kgs) *':1.63, 'Emitter Name': 'Foo', ...}
p2 = {'Part Number':'W502', 'Weight (Kgs) *':0.14, 'Emitter Name': 'Foo', ...}
解决方案
你可以使用 list 和 dict 理解来做这样的事情:
dl = [['Part Number', 'W501', 'W502', 'W503', 'W504', 'W505', 'W506', 'W507'],
['Weight (Kgs) *', 1.653, 0.14, 0.1, 0.11, 0.11, 1.19, 0.71],
['Volume Month *', 2000, 2000, 2000, 2000, 2000, 2000, 2000],
['Emitter Name', 'Foo'],
['Emitter Location', 'Manesar'],
['Contact person Name', 'bar'],
['Designation', 'Project'],
['Contact Number', '123456']]
n = max(len(value) for value in dl)
every_dict = {value[0]: value[1] for value in dl if len(value) == 2}
specific_dict = [{value[0]: value[i] for value in dl if len(value) == n} for i in range(1, n)]
combined_dict = [{**specific, **every_dict} for specific in specific_dict]
输出:
>>> import json
>>> print(json.dumps(combined_dict, indent=2))
[
{
"Part Number": "W501",
"Weight (Kgs) *": 1.653,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W502",
"Weight (Kgs) *": 0.14,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W503",
"Weight (Kgs) *": 0.1,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W504",
"Weight (Kgs) *": 0.11,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W505",
"Weight (Kgs) *": 0.11,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W506",
"Weight (Kgs) *": 1.19,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
},
{
"Part Number": "W507",
"Weight (Kgs) *": 0.71,
"Volume Month *": 2000,
"Emitter Name": "Foo",
"Emitter Location": "Manesar",
"Contact person Name": "bar",
"Designation": "Project",
"Contact Number": "123456"
}
]
推荐阅读
- javascript - 如何在玩笑时跳过模板测试
- batch-file - 加密winrar命令行的密码部分
- node.js - 节点生成子进程在 Windows 中不起作用
- subtraction - 求解和证明两个元素相减并取模的 DFA
- javascript - 在 javascript html css 中放置模态是否与在电子 js 中相同?
- python-3.x - 在 Tkinter Python3 的列表中使用多个 StringVar() 变量
- python - sklearn Logistic Regression - 使用来自外部测试数据的自定义输入进行预测
- javascript - 可能无法导出受污染的“OffscreenCanvas”
- excel - Excel中TextFrame中的行距
- wordpress - 如何删除wordpress中的评论栏