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

Python列表嵌套字典按'Res'键排序报KeyError问题求助

问题分析与解决

问题重现

给定列表结构数据:

comps = [('7', {'Name': 'Cristiano', 'Surname': 'Ronaldo', 'Res': 152.329937}), ...]

执行以下排序代码时抛出KeyError: 'Res':

sorted_comps = sorted(comps.items(), key=lambda x:x[1]['Res'])

但改用'Name'或'Surname'作为排序键时,排序能正常执行,甚至支持反转排序。

核心原因

  1. 调用对象错误:comps是列表类型,根本没有items()方法——如果真的用comps.items()运行,首先会触发AttributeError,你实际运行的应该是sorted(comps, key=...),只是描述时写错了。
  2. 键缺失问题:这是引发KeyError的关键——你的comps列表中,至少有一个元组里的字典没有'Res'键,但所有字典都包含'Name'和'Surname',所以用这两个键排序不会报错。

解决办法

方法1:补全所有字典的Res键

遍历列表,给缺失Res的字典设置默认值(比如0.0,可根据业务需求调整):

for idx, (key, data) in enumerate(comps):
    data.setdefault('Res', 0.0)
    comps[idx] = (key, data)

之后再执行排序就不会报错:

sorted_comps = sorted(comps, key=lambda x: x[1]['Res'])

方法2:排序时兼容缺失键

如果不想修改原始数据,可在排序的lambda中用dict.get()方法,指定缺失时的默认值:

# 缺失Res时用0.0参与排序,可按需修改默认值
sorted_comps = sorted(comps, key=lambda x: x[1].get('Res', 0.0))

方法3:修正调用语法(如果是笔误)

确认排序对象是列表comps本身,而非不存在的comps.items():

# 正确的排序调用(前提是所有字典都有Res键)
sorted_comps = sorted(comps, key=lambda x: x[1]['Res'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:37:42