You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:25:16