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

如何更新嵌套字典保留原有键值对,生成指定格式嵌套字典?

字典嵌套匹配与合并问题解决

原始数据与需求

给定两个字典:

d1 = {'Hulu' : 12, 'Crunchyroll' : 10, 'Cornhub' : 10, 'Twitter': 20 }# Name and Date
d2 = {'Crunchyroll': 15, 'Bulu' : 30, 'Cornhub': 50, 'Hulu': 25, 'Twitter': 100}# Name and Amount

需求:匹配两个字典中名称相同的项,以d1中的值作为父键,将d2中对应的(名称、金额)元组整理到父键对应的集合中,形成嵌套字典。

当前问题

现有代码运行输出:

{12: {('Hulu', 25)}, 10: {('Crunchyroll', 15)}, 'Cornhub': 50, 20: {('Twitter', 100)}}

与预期输出不符,预期输出应为:

{12: {('Hulu', 25)}, 10: {('Crunchyroll', 15), ('Cornhub', 50)}, 20: {('Twitter', 100)}}

问题点:相同父键10下的('Cornhub',50)未被合并到对应集合,反而错误地成为了顶级键值对。

错误原因

  1. 嵌套遍历d2所有项效率低下,逻辑冗余
  2. elif分支中dp.update({i})逻辑错误:i是d2的键值对元组,执行该操作会直接将元组的第一个元素(如'Cornhub')作为顶级键添加到dp,导致异常结果
  3. 未正确处理“父键已存在时,向对应集合追加元素”的逻辑

修正后的代码

d1 = {'Hulu' : 12, 'Crunchyroll' : 10, 'Cornhub' : 10, 'Twitter': 20 }# Name and Date
d2 = {'Crunchyroll': 15, 'Bulu' : 30, 'Cornhub': 50, 'Hulu': 25, 'Twitter': 100}# Name and Amount
dp = {}
total = 0

# 遍历d1中的每个名称与对应日期
for name, date in d1.items():
    # 只处理d2中存在的名称
    if name in d2:
        amount = d2[name]
        total += amount
        # 日期作为父键,不存在则创建新集合
        if date not in dp:
            dp[date] = {(name, amount)}
        # 日期已存在,向集合中追加元组
        else:
            dp[date].add((name, amount))

print('Up coming bills', dp, '\nTotal= $', total)

运行结果

Up coming bills {12: {('Hulu', 25)}, 10: {('Crunchyroll', 15), ('Cornhub', 50)}, 20: {('Twitter', 100)}} 
Total= $ 190

内容的提问来源于stack exchange,提问作者Mamushi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 04:20:15