【问题标题】:How to sort Python dictionary by value of keys [duplicate]如何按键值对Python字典进行排序[重复]
【发布时间】:2019-07-22 15:58:05
【问题描述】:

我使用 Python 3.7 构建字典,并希望按键的值对字典进行排序。

例如,我有这样的字典:

Dict = ["r_1":...; "r_10":...; "r_11":...;....; "r_2":...]

但我希望它是

Dict = ["r_1":...; "r_2":...; ....; "r_10":...]

我只找到对键或值进行排序的方法,但没有对键值进行排序的解决方案。

** 我发现了多个仅对键进行排序的问题,但 py3 会自动按“r_1”、“r_10”、“r_11”、...、“r_2”的顺序对它们进行排序。这些问题与这个不同。

【问题讨论】:

  • 它没有重复。我想对键的值进行排序,而不仅仅是键。 Python 3 将按照问题提出的方式自动对键进行排序。
  • dict 在哪里?字典不使用[ ] 表示法。你的照片也是一张桌子。请确保您有一个最小、完整且可验证的示例。这也令人困惑你为什么使用;
  • 另外你不应该使用Dict作为变量名,因为dict是一个关键字(虽然它们不会互相覆盖)。
  • 据我了解,您希望将 _ 之后的键字符串部分视为一个数字并对其进行排序,因此您需要将其提取出来并使用一些 lambda 函数对该数字进行排序。 ..

标签: python-3.x sorting dictionary


【解决方案1】:

使用OrderedDict:

from collections import OrderedDict

d = {"r_1": 1, "r_10": 10, "r_2": 2}
sd = sorted(d.items(), key=lambda x: int(x[0].split("_")[-1]))
sorted_d = OrderedDict(sd)

for k, v in sorted_d.items():
    print("{}: {}".format(k, v))

r_1: 1
r_2: 2
r_10: 10

【讨论】:

  • 谢谢!我几乎要生气有些人没有仔细阅读问题并拿起小错误而不是真正回答我的问题,但你的回答真的对我有帮助!
  • 嗨@Alice。如果您仍然认为该问题不是重复的,您可以在问题下的 cmets 中进行讨论。看起来人们对此做出了回应并认为它仍然是重复的。您可以在问题下方 ping Error - Syntactical Remorse,因为他/她是一个亲密的选民。
【解决方案2】:

好的。我想出了排序方式,但会将字典更改为列表。 它是:

Dict = sorted(Dict.items(), key = lambda kv:int(''.join(filter(str.isdigit, kv[0].split("_")[-1]))))

【讨论】:

    【解决方案3】:
    >>>x= sorted(Dict.items())
    >>>x
    

    【讨论】:

      猜你喜欢
      • 2015-11-03
      • 2021-06-28
      • 2022-01-19
      • 2012-08-09
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多