Python中如何多次追加键值对且不新增大括号,同时支持重复条目?
向列表内的字典追加键值对并支持重复条目
问题场景
现有代码:
textToDump = {"food": "cereal_bowl", "ingredients":[]} textToDump["ingredients"].append({"milk": 100, "cereal": 100, }) textToDump["ingredients"].append({"honey": 10}) print(textToDump)
运行结果:
{'food': 'cereal_bowl', 'ingredients': [{'milk': 100, 'cereal': 100}, {'honey': 10}]}
期望结果:
{'food': 'cereal_bowl', 'ingredients': [{'milk': 100, 'cereal': 100, 'honey': 10}]}
需求:曾尝试用字典update()替代列表,但ingredients需要支持重复条目,求最简实现方法。
解决方案
1. 单一字典追加(无重复键需求时)
如果ingredients只需保留一个字典,后续仅往其中添加键值对,无需每次append新字典:
textToDump = {"food": "cereal_bowl", "ingredients":[]} # 确保列表内存在一个空字典 if not textToDump["ingredients"]: textToDump["ingredients"].append({}) # 使用update()向该字典追加键值对 textToDump["ingredients"][0].update({"milk": 100, "cereal": 100}) textToDump["ingredients"][0].update({"honey": 10}) print(textToDump)
输出结果与期望一致:
{'food': 'cereal_bowl', 'ingredients': [{'milk': 100, 'cereal': 100, 'honey': 10}]}
2. 支持重复条目(同键多次录入)
普通字典不允许重复键,若需支持重复条目,可采用以下两种方式:
方式A:列表套元组(最简)
将ingredients设为元组列表,每个元组存储一组食材名与数量:
textToDump = {"food": "cereal_bowl", "ingredients":[]} # 追加重复条目 textToDump["ingredients"].append(("milk", 100)) textToDump["ingredients"].append(("cereal", 100)) textToDump["ingredients"].append(("honey", 10)) textToDump["ingredients"].append(("milk", 80)) # 重复添加milk print(textToDump)
输出:
{'food': 'cereal_bowl', 'ingredients': [('milk', 100), ('cereal', 100), ('honey', 10), ('milk', 80)]}
方式B:列表套单键字典(保留字典结构)
每个条目是仅含一组键值对的字典,后续可按需合并统计:
from collections import defaultdict textToDump = {"food": "cereal_bowl", "ingredients":[]} # 追加单个键值对作为独立字典 textToDump["ingredients"].append({"milk": 100}) textToDump["ingredients"].append({"cereal": 100}) textToDump["ingredients"].append({"honey": 10}) textToDump["ingredients"].append({"milk": 80}) # 可选:合并为统计总量的字典 merged = defaultdict(int) for item in textToDump["ingredients"]: for k, v in item.items(): merged[k] += v print("原始结构:", textToDump) print("合并后总量:", dict(merged))
输出:
原始结构: {'food': 'cereal_bowl', 'ingredients': [{'milk': 100}, {'cereal': 100}, {'honey': 10}, {'milk': 80}]} 合并后总量: {'milk': 180, 'cereal': 100, 'honey': 10}
内容的提问来源于stack exchange,提问作者Andrej
相关产品推荐
相关产品推荐

