为什么append操作返回None?交换字典键值时遇此问题

为什么append操作返回None?交换字典键值时遇此问题

字典键值交换(值重复时合并键到列表)的问题修复 #你的代码存在的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

相关推荐