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

尝试向列表中添加列表时触发TypeError,求代码修正方案

Fixing TypeError When Inverting a Dictionary with Duplicate Values

我帮你找到了问题的根源,咱们来一步步解决它:

问题分析

你的代码在处理重复的字典值(也就是反转后的键)时犯了一个小错误:当new_key已经存在于new_dict中时,你用new_list.append(new_dict[new_key])把已有的列表整个当成一个元素添加到了新列表里。举个例子,处理{'ab': 'cd', 'bb': 'cd'}时,第一次处理ab会得到'cd': ['ab'],第二次处理bb时,你的代码会把['ab']作为单个元素加到['bb']里,变成['bb', ['ab']]。之后执行sorted(new_list)时,Python会尝试把字符串和列表做比较,这就触发了TypeError——不同类型的元素无法直接排序。

修正后的代码

我调整了代码逻辑,让它更直观且避免错误:

def inverse_dict(my_dict):
    new_dict = {}
    # 直接遍历原字典的键值对,命名更清晰
    for original_key, original_value in my_dict.items():
        if original_value in new_dict:
            # 如果反转后的键已存在,直接向对应列表添加原键
            new_dict[original_value].append(original_key)
        else:
            # 不存在则创建新列表,存入当前原键
            new_dict[original_value] = [original_key]
        # 对列表进行排序,保证输出有序
        new_dict[original_value].sort()
    return new_dict

def main():
    print(inverse_dict({'cc': 'dd', 'ab': 'cd', 'bb': 'cd'}))
    print(inverse_dict({'b': 'd', 'c': 'd', 'a': 'd'}))

关键修改点

  • 改用my_dict.items()遍历键值对:相比你原来遍历键再取值的方式,直接获取original_key和original_value更易读,也避免了变量名混淆(你原来的new_value其实是原字典的键,容易让人误解)
  • 正确添加元素:当反转后的键已存在时,直接调用append(original_key)把原字典的键添加到已有列表中,而不是把整个列表作为元素插入
  • 即时排序:每次添加元素后对列表排序,确保输出的列表始终是有序状态

测试输出

运行main()函数后,会得到你期望的结果:

{'dd': ['cc'], 'cd': ['ab', 'bb']}
{'d': ['a', 'b', 'c']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:22:16