【问题标题】:How to sort a nested dictionary value numerically?如何对嵌套字典值进行数字排序?
【发布时间】:2021-05-31 14:54:21
【问题描述】:

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

【问题讨论】:

  • 您的示例不是有效的 python 字典。而且字典不适合排序数据,使用列表。
  • 这是一个对象列表。只需使用合适的关键功能(大概是点)对其进行排序,您应该会很好。除此之外无法帮助您,因为该问题无效。

标签: python sorting dictionary numeric ordereddictionary


【解决方案1】:

类似的东西:

✗ 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]:

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 2020-04-29
      • 2014-05-01
      • 2018-11-23
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多