如何按数字对嵌套字典值进行排序?

问题描述

我有一本描述曲棍球联盟球队记录的嵌套字典。在曲棍球联赛中,他们有一个描述积分榜的积分系统。我想按点值对字典进行排序。积分制是((总胜*2)+(加时负))

standings =
    [
        {'Memphis': {'20-11-16': 56 PTS}},{'Seattle': {'10-25-10': 30 PTS}},{'Boston': {'35-0-10': 80 PTS}},{'Dallas': {'25-15-0': 50 PTS}}
    ]

打印时的期望结果

[
    {'Boston': {35-0-10: 80 PTS}},{'Memphis': {20-11-16: 56 PTS}},{'Dallas': {25-15-0: 50 PTS}},{'Seattle': {10-25-10: 30 PTS}}
]

如何对字典进行排序,使排名根据 PTS 值从高到低按数字顺序排列?感谢您的帮助。

解决方法

类似的东西:

✗ ipython
Python 3.8.1 (default,Dec 30 2019,04:38:13)
Type 'copyright','credits' or 'license' for more information
IPython 7.9.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: standings = [{'Memphis': {'20-11-16': 56}},{'Seattle': {'10-25-10': 30}},{'Boston': {'35-0-10': 80}},{'Dallas': {'25-15-0': 50}}]

In [2]: sorted(standings,key=lambda x: list(list(x.values())[0].values())[0])
Out[2]:
[{'Seattle': {'10-25-10': 30}},{'Dallas': {'25-15-0': 50}},{'Memphis': {'20-11-16': 56}},{'Boston': {'35-0-10': 80}}]

In [3]: sorted(standings,key=lambda x: list(list(x.values())[0].values())[0],reverse=True)
Out[3]:
[{'Boston': {'35-0-10': 80}},{'Seattle': {'10-25-10': 30}}]

In [4]:

,

如果您只关心打印输出,那么您可以只进行 lambda 排序。如果出于某种原因,您确实希望字典保持顺序,那么您应该考虑使用 collections.OrderedDict 值得一提的是,字典本质上是无序的,所以你应该考虑使用另一种数据格式。