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'作为排序键时,排序能正常执行,甚至支持反转排序。
核心原因
- 调用对象错误:
comps是列表类型,根本没有items()方法——如果真的用comps.items()运行,首先会触发AttributeError,你实际运行的应该是sorted(comps, key=...),只是描述时写错了。 - 键缺失问题:这是引发
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
相关产品推荐
相关产品推荐

