是否可以从其他词典创建词典?
我有一个字典列表,看起来像这样:
my_dicts =
[{'1A': 1, '3E': 2, 'PRODUCT NAME': 'White Bread loaf large', 'Week': 1},
{'1A': 1, '1B': 1, '1C': 1, '1D': 2, '1E': 2, '2C': 1, '3E': 2, 'PRODUCT NAME': 'Brown Bread loaf
large', 'Week': 1}...]
我想创建一个字典,看起来像这样:
new_dict =
[{'HOUSE NAME': '1A', 'White Bread Loaf Large' : 1, 'Brown Bread loaf large' : 1},
{'HOUSE NAME': '1B', 'Brown Bread loaf large' : 1},...
{'HOUSE NAME': '3E', 'White Bread Loaf Large' : 2, 'Brown Bread Loaf Large' : 2}]
基本上我想要键 'HOUSE NAME' ,具有每个家喻户晓的值,以 'my_dicts' 'PRODUCT NAME' 作为键,值是房子名称的值(IE 1)
答案 0 :(得分:0)
不确定您的意思,但我建议您使用 House_Name 值中的列表以字符串格式保存 PRODUCT NAME 值
答案 1 :(得分:0)
我的回答只需要一个先决条件,那就是你有一套/唯一的房子列表IDs
my_dicts = [{
'1A': 1,
'3E': 2,
'PRODUCT NAME': 'White Bread loaf large',
'Week': 1
}, {
'1A': 1,
'1C': 2,
'PRODUCT NAME': 'White Bread loaf large',
'Week': 1
}, {
'1A': 1,
'1B': 1,
'1C': 1,
'1D': 2,
'PRODUCT NAME': 'Brown Bread loaf large',
'Week': 1
}]
# !:Prerequisite you have the IDs as a unique set
houses = set(['1A', '1B', '1C', '1D', '3E'])
output_list = []
for house in houses:
output_entry = {}
output_entry["HOUSE NAME"] = house
for entry in my_dicts:
if entry.get(house) and entry.get("PRODUCT NAME"):
product_name = entry.get("PRODUCT NAME")
if output_entry.get(product_name):
output_entry[product_name] += 1
else:
output_entry[product_name] = 1
output_list.append(output_entry)
print(output_list)
您可以使用 map
和 filter
输出:
[
{'HOUSE NAME': '1A', 'White Bread loaf large': 2, 'Brown Bread loaf large': 1},
{'HOUSE NAME': '1C', 'White Bread loaf large': 1, 'Brown Bread loaf large': 1},
{'HOUSE NAME': '1B', 'Brown Bread loaf large': 1},
{'HOUSE NAME': '3E', 'White Bread loaf large': 1},
{'HOUSE NAME': '1D', 'Brown Bread loaf large': 1}
]
<块引用>
这只是为了展示 map
和 filter
如何根据 OP 的要求工作,请不要这样做,因为它会生成代码可读性较差且不是pythonic
from functools import reduce
...
output_entry["HOUSE NAME"] = house
output_entry = {
**output_entry,
**dict(
reduce(
lambda x, y: {
k: x.get(k, 0) + y.get(k, 0)
for k in set(x) | set(y)
}, (map(
lambda x: {x["PRODUCT NAME"]: 1},
filter(lambda x: x.get(house) and x.get("PRODUCT NAME"), my_dicts)))))
}
output_list.append(output_entry)
print(output_list)
...