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

时间:2021-03-02 03:45:07

标签: python sorting dictionary numeric ordereddictionary

我有一本描述曲棍球联盟球队记录的嵌套字典。在曲棍球联赛中,他们有一个描述积分榜的积分系统。我想按点值对字典进行排序。积分制是((总胜*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 值从高到低按数字顺序排列?感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

类似的东西:

✗ 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}},
 {'Memphis': {'20-11-16': 56}},
 {'Dallas': {'25-15-0': 50}},
 {'Seattle': {'10-25-10': 30}}]

In [4]:

答案 1 :(得分:0)

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