如何解决python中的键错误?检查下面的代码
我想你的意思是这可能如何解决python中的键错误?检查下面的代码,python,python-3.x,Python,Python 3.x,我想你的意思是这可能 KeyError: 'Points' 您可以按点对每个名称进行排序。问题在于列表中有一个字典,所以当您尝试对列表进行排序时,它会查看外部字典,而不是内部字典 解决方案是只使用字典项,如下所示: def myFUNC (i): return i[1]["Points"] team_stats = {"76ers" : {"Wins" : 22, "Lo
KeyError: 'Points'
您可以按点对每个名称进行排序。问题在于列表中有一个字典,所以当您尝试对列表进行排序时,它会查看外部字典,而不是内部字典 解决方案是只使用字典项,如下所示:
def myFUNC (i):
return i[1]["Points"]
team_stats = {"76ers" : {"Wins" : 22,
"Losses" : 12,
"Points" : 647},
"Nets" : {"Wins" : 22,
"Losses" : 13,
"Points" : 629},
"Bucks" : {"Wins" : 21,
"Losses" : 13,
"Points" : 618}}
print(sorted(team_stats.items(), key=myFUNC))
您获得
KeyError
的原因是,您试图从字典的外部级别访问键“点”
,而该键不属于字典的外部级别,即使它属于当前结构,您也不会看到结果上的差异
在列表
中有一个目录
,没有任何东西可以排序
。如果要对dict
进行排序,则只有在使用3.7+
时才可能,因为从3.7
开始。如果确实满足版本要求,则使用:
team_stats = {"76ers" : {"Wins" : 22,
"Losses" : 12,
"Points" : 647},
"Nets" : {"Wins" : 22,
"Losses" : 13,
"Points" : 629},
"Bucks" : {"Wins" : 21,
"Losses" : 13,
"Points" : 618}}
sorted_teams = list(team_stats.items())
sorted_teams.sort(key = lambda team : team[1]["Points"])
# [('Bucks', {'Wins': 21, 'Losses': 13, 'Points': 618}), ('Nets', {'Wins': 22, 'Losses': 13, 'Points': 629}), ('76ers', {'Wins': 22, 'Losses': 12, 'Points': 647})]
给
def myFUNC (e):
return e[1]["Points"]
team_stats = [
{"76ers" : {"Wins" : 22,
"Losses" : 12,
"Points" : 647},
"Nets" : {"Wins" : 22,
"Losses" : 13,
"Points" : 629},
"Bucks" : {"Wins" : 21,
"Losses" : 13,
"Points" : 618}}
]
result = [dict(sorted(team_stats[0].items(), key=myFUNC))]
print(result)
如果不满足版本要求,则需要使用:
其中:
from collections import OrderedDict
# replace the `result` line with this:
result = [OrderedDict(sorted(team_stats[0].items(), key=myFUNC))]
但我不明白你为什么需要这个清单
另外,
list().sort()
在适当的位置修改列表
,这不仅在这里是无用的,打印它将返回None
如果您将dict
存储在列表之外,您可以非常简单地对其进行排序
通过将sorted()
方法封装在dict()
该列表用于什么?您的
团队统计数据是的列表的dict
的dicts
。稍早一点关闭词典(在“Points”:647},
[{'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618},
'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629},
'76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}}]
from collections import OrderedDict
# replace the `result` line with this:
result = [OrderedDict(sorted(team_stats[0].items(), key=myFUNC))]
[OrderedDict([('Bucks', {'Wins': 21, 'Losses': 13, 'Points': 618}),
('Nets', {'Wins': 22, 'Losses': 13, 'Points': 629}),
('76ers', {'Wins': 22, 'Losses': 12, 'Points': 647})])]
team_stats = {"76ers" : {"Wins" : 22,
"Losses" : 12,
"Points" : 647},
"Nets" : {"Wins" : 22,
"Losses" : 13,
"Points" : 629},
"Bucks" : {"Wins" : 21,
"Losses" : 13,
"Points" : 618}}
dict(sorted(team_stats.items(), key=lambda x: x[1]['Points']))
#{'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618}, 'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629}, '76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}}
# in reverse
dict(sorted(team_stats.items(), key=lambda x: x[1]['Points'], reverse=True))
#{'76ers': {'Wins': 22, 'Losses': 12, 'Points': 647}, 'Nets': {'Wins': 22, 'Losses': 13, 'Points': 629}, 'Bucks': {'Wins': 21, 'Losses': 13, 'Points': 618}}