如何更新嵌套字典保留原有键值对,生成指定格式嵌套字典?
字典嵌套匹配与合并问题解决
原始数据与需求
给定两个字典:
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)未被合并到对应集合,反而错误地成为了顶级键值对。
错误原因
- 嵌套遍历
d2所有项效率低下,逻辑冗余 elif分支中dp.update({i})逻辑错误:i是d2的键值对元组,执行该操作会直接将元组的第一个元素(如'Cornhub')作为顶级键添加到dp,导致异常结果- 未正确处理“父键已存在时,向对应集合追加元素”的逻辑
修正后的代码
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
相关产品推荐
相关产品推荐

