python - 按值对字典进行排序而不丢失键的信息

标签 python sorting dictionary

编辑-我已经看到了其他问题的答案,解释了如何按键或值对字典进行排序,但没有看到任何允许访问键和值的答案。如果我做错了什么,我很抱歉,我显然是新来的。有人删除了我帖子末尾的致谢词,这对我来说似乎很奇怪,但如果我不应该在帖子中这样做,如果有人让我知道那就太好了

我正在开发一个个人项目,能够将梦幻棒球联盟的评分设置输入到程序中,并接收球员列表以及他们在特定评分系统下的总得分。我做了一些工作,读取包含不同评分类别的总计的文件,并根据用户输入的设置计算总分。然后,我将信息添加到字典中,其中玩家姓名、球队和位置的字符串是键,他们的总得分是值。这是字典中的前几个条目:

{'Rick Porcello, Bos SP': 579.0, 'Chris Sale, CWS SP': 575.0, 'Justin Verlander, Det SP': 601.0, 'Madison Bumgarner, SF SP': 617.0, 'Max Scherzer, Wsh SP': 668.0, 'Johnny Cueto, SF SP': 584.0}

我现在正在寻找一种方法来显示按总分从最大到最小排序的字典内容。例如,我想将上述条目显示为:

'Max Scherzer, Wsh SP': 668.0
'Madison Bumgarner, SF SP': 617.0
'Justin Verlander, Det SP': 601.0
'Johnny Cueto, SF SP': 584.0
'Rick Porcello, Bos SP': 579.0
'Chris Sale, CWS SP': 575.0

我知道字典的排序功能,但这只给我留下了总分列表。有没有一种方法可以让我根据值对条目进行排序,但仍然能够访问 key ,以便我知道哪个玩家获得了 X 分?

此外,如果有一个函数可以让我做我想做的事情,那么该函数如何扩展?我假设一个函数即使复杂性很差,只需要几个条目就可以了,但我的完整字典将有数百个玩家。这只是一个个人项目,所以如果我需要等一分钟才能得到结果,那没什么大不了的,但显然越快越好。我只是对这一部分感到好奇,因为无论整体速度如何,都能做到这一点是我主要关心的问题。

最佳答案

如果您想使用键/值结构保留排序结果,我建议 collections.OrderedDict :

from collections import OrderedDict
from operator import itemgetter

dct = {'Rick Porcello, Bos SP': 579.0, 'Chris Sale, CWS SP': 575.0, 'Justin Verlander, Det SP': 601.0, 'Madison Bumgarner, SF SP': 617.0, 'Max Scherzer, Wsh SP': 668.0, 'Johnny Cueto, SF SP': 584.0}

OrderedDict(sorted(dct.items(), key=itemgetter(1), reverse=True))

key=itemgetter(1) 定义您按“值”排序,reverse=True 告诉 sorted按降序排序。

这给出:

OrderedDict([('Max Scherzer, Wsh SP', 668.0),
             ('Madison Bumgarner, SF SP', 617.0),
             ('Justin Verlander, Det SP', 601.0),
             ('Johnny Cueto, SF SP', 584.0),
             ('Rick Porcello, Bos SP', 579.0),
             ('Chris Sale, CWS SP', 575.0)])

并且仍然可以像普通字典一样访问:

>>> odict['Chris Sale, CWS SP']
575.0

或迭代它:

>>> for name, value in odict.items():
...     print('{name}: {value}'.format(name=name, value=value))
Max Scherzer, Wsh SP: 668.0
Madison Bumgarner, SF SP: 617.0
Justin Verlander, Det SP: 601.0
Johnny Cueto, SF SP: 584.0
Rick Porcello, Bos SP: 579.0
Chris Sale, CWS SP: 575.0

鉴于它对输入进行排序,它将以 O(n logn) 进行缩放。

关于python - 按值对字典进行排序而不丢失键的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202256/

相关文章:

css - CSS 文件排序重要吗?如果重要,为什么?

regex - 如何根据行的特殊部分对文件的行进行排序

Python - 根据总和对列表进行排序

arrays - Go中的未知深度列表

python - 使用 .txt 文件作为字典

python - 要指定列名称,为什么 `pd.read_csv` 和 `pd.DataFrame` 使用相同的参数名称?

javascript - 在python中使用JavaScript函数抓取页面的问题

python - Flask:在 View 中获取蓝图的 url_prefix

python - BeautifulSoup' 没有属性 'HTML_ENTITIES

c# - 在 C# 中测试对象是否为字典