字典键值交换(值重复时合并键到列表)的问题修复 #你的代码存在的3个核心问题: #对append方法的误解:list.append()是原地修改列表的方法,它的返回值为None,你打印这个返回值自然会输出None,且不需要将其返回值赋值给任何变量。逻辑覆盖错误:当你执行new_d[v] = list(k)时,直接把之前已经追加了新元素的列表覆盖成了只包含当前k的新列表,这就是最终1对应的结果是['c']而非['a','c']的原因。遗漏值不存在的情况:当new_d中没有当前值v时,你没有处理这种场景,导致像2这样的唯一值对应的键没有被加入新字典。修正后的代码: #def swap_keys_and_values(d):
new_d = {}
for k, v in d.items():
if v in new_d:
# 值已存在,直接追加键到对应列表
new_d[v].append(k)
else:
# 值不存在,创建新列表存入当前键
new_d[v] = [k]
return new_d
print(swap_keys_and_values({'a': 1, 'b': 2, 'c': 1}))
输出结果: #{1: ['a', 'c'], 2: ['b']}
简化实现(可选): #可以用collections.defaultdict简化代码逻辑,自动处理值不存在的情况:
from collections import defaultdict
def swap_keys_and_values(d):
new_d = defaultdict(list)
for k, v in d.items():
new_d[v].append(k)
# 转成普通字典(可选操作)
return dict(new_d)
内容的提问来源于stack exchange,提问作者Julian Sanjuan