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



我有一个嵌套字典,描述曲棍球联盟中的球队记录。在冰球联盟中,他们有一个描述排名的计分系统。我想按照点的值对字典进行排序。积分系统是((总胜利*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}},
{'Memphis': {'20-11-16': 56}},
{'Dallas': {'25-15-0': 50}},
{'Seattle': {'10-25-10': 30}}]
In [4]:

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

最新更新