Python嵌套字典排序问题:按points排序未达预期结果求助
问题:按points排序嵌套字典未得到预期结果
问题描述
我想要根据points对嵌套字典中的球队进行排序,编写了排序代码但未得到预期效果。期望排序顺序为Spain、Portugal、Morocco、Iran。
原始字典
{ 'Spain': { 'wins': 3, 'loses': 0, 'draws': 0, 'goal difference': 4, 'points': 9 }, 'Iran': { 'wins': 0, 'loses': 3, 'draws': 0, 'goal difference': -6, 'points': 0 }, 'Portugal': { 'wins': 2, 'loses': 1, 'draws': 0, 'goal difference': 4, 'points': 6 }, 'Morocco': { 'wins': 1, 'loses': 2, 'draws': 0, 'goal difference': -2, 'points': 3 } }
使用的排序代码
from collections import OrderedDict sorted_dict = OrderedDict(sorted(B_group.items(), key=lambda x: x[1]["points"], reverse=True))
当前得到的结果
Spain wins:3 , loses:0 , draws:0 , goal difference:4 , points:9 Iran wins:0 , loses:3 , draws:0 , goal difference:-6 , points:0 Portugal wins:2 , loses:1 , draws:0 , goal difference:4 , points:6 Morocco wins:1 , loses:2 , draws:0 , goal difference:-2 , points:3
问题分析与解决方案
你的排序代码逻辑本身是正确的,当前结果顺序异常大概率是输出方式错误——比如你可能没遍历排序后的OrderedDict,而是直接输出了原字典,或者输出代码存在疏漏。
验证排序是否生效的正确方式是遍历排序后的结果:
for team, stats in sorted_dict.items(): print(f"{team} wins:{stats['wins']} , loses:{stats['loses']} , draws:{stats['draws']} , goal difference:{stats['goal difference']} , points:{stats['points']}")
执行这段代码后,会得到你期望的顺序:
Spain wins:3 , loses:0 , draws:0 , goal difference:4 , points:9 Portugal wins:2 , loses:1 , draws:0 , goal difference:4 , points:6 Morocco wins:1 , loses:2 , draws:0 , goal difference:-2 , points:3 Iran wins:0 , loses:3 , draws:0 , goal difference:-6 , points:0
另外,在Python 3.7+版本中,普通字典默认保持插入顺序,也可以不用OrderedDict,直接生成排序后的列表处理:
sorted_teams = sorted(B_group.items(), key=lambda x: x[1]["points"], reverse=True) for team, stats in sorted_teams: print(f"{team} wins:{stats['wins']} , loses:{stats['loses']} , draws:{stats['draws']} , goal difference:{stats['goal difference']} , points:{stats['points']}")
内容的提问来源于stack exchange,提问作者yosef
相关产品推荐
相关产品推荐

