问题描述
我有一本描述曲棍球联盟球队记录的嵌套字典。在曲棍球联赛中,他们有一个描述积分榜的积分系统。我想按点值对字典进行排序。积分制是((总胜*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
值得一提的是,字典本质上是无序的,所以你应该考虑使用另一种数据格式。