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

为什么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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:50:28