python - 在重复的情况下仅对列表的一个值求和并将其转换为字典
问题描述
堆栈溢出,你好
我有一个问题,我几乎解决了,但是,我不知道最后一步。
因此,在初始列表中有两个几乎相同的元素('Tomato', 3, 'PCS')
和('Tomato', 2, 'PCS')
,其中只有中间参数(数量)不同,最后它应该是这两个数量的总和。最后我应该总结 3 和 2。我将描述它会更容易理解:
因此,初始列表是:
initial = [('Egg', 2, 'PCS'), ('Milk', 100, 'ml'), ('Tomato', 3, 'PCS'), ('Beef', 500, 'g'), ('Sweet pepper', 1, 'PCS'), ('Pita bread', 2, 'PCS'), ('Wine vinegar', 1, 'tbsp'), ('Tomato', 2, 'PCS')]
最后我应该收到:
{'Beef': {'measure': 'g', 'quantity': 500},
'Egg': {'measure': 'PCS', 'quantity': 2},
'Milk': {'measure': 'ml', 'quantity': 100},
'Pita bread': {'measure': 'PCS', 'quantity': 2},
'Sweet pepper': {'measure': 'PCS', 'quantity': 1},
'Tomato': {'measure': 'PCS', 'quantity': 5},
'Wine vinegar': {'measure': 'tbsp', 'quantity': 1}}
但是在我收到的最后一行中'Tomato': {'measure': 'PCS', 'quantity': 2}
,因为列表中的最后一个元素只是替换了具有相似特征的元素,而不是求和“数量”。
我得到的结果是:
{'Beef': {'measure': 'g', 'quantity': 500},
'Egg': {'measure': 'PCS', 'quantity': 2},
'Milk': {'measure': 'ml', 'quantity': 100},
'Pita bread': {'measure': 'PCS', 'quantity': 2},
'Sweet pepper': {'measure': 'PCS', 'quantity': 1},
'Tomato': {'measure': 'PCS', 'quantity': 2},
'Wine vinegar': {'measure': 'tbsp', 'quantity': 1}}
我的代码是:
for elems2 in initial:
dinit = {'measure': elems2[2], 'quantity': elems2[1]}
d = {}.fromkeys([elems2[0]], dinit)
new_book[elems2[0]] = dinit
pprint(new_book)
有人可以帮我解决对“数量”求和的问题 - 列表元素内的元素吗?
解决方案
您可以使用一个简单的 for 循环:
result = {}
for item in initial:
key, quantity, measure = item
if key in result:
result[key]["quantity"] += quantity
else:
result[key] = {"measure": measure, "quantity": quantity}
print(result)
这产生
{'Egg': {'measure': 'PCS', 'quantity': 2},
'Milk': {'measure': 'ml', 'quantity': 100},
'Tomato': {'measure': 'PCS', 'quantity': 5},
'Beef': {'measure': 'g', 'quantity': 500},
'Sweet pepper': {'measure': 'PCS', 'quantity': 1},
'Pita bread': {'measure': 'PCS', 'quantity': 2},
'Wine vinegar': {'measure': 'tbsp', 'quantity': 1}}
推荐阅读
- python - TypeError:无法解压不可迭代的 NoneType 对象 Zbar Raspberry pi
- python - 如何在 Keras 中使用经过训练的模型进行预测
- binary - 编写一个程序来添加一个二进制文件
- c# - 优化涉及 Where Newbie C# / LINQ 问题的 LINQ 查询
- kubernetes - srimzi 0.14:Kafka 代理失败的身份验证
- c++ - const_cast
(char* const) 不是左值? - angular6 - 如何将多个 pdf 文件下载为 zip 文件?
- arrays - 基于目标条件从数组中随机采样元素
- python - Django rest self-reference ForeignKey error 禁止直接赋值给相关集合的反面。改用 parent.set()
- javascript - Eureka Server 在 Spring Boot 中启动时出现错误