【问题标题】:Sort Dict by Values in Python 3.6+在 Python 3.6+ 中按值排序字典
【发布时间】:2019-02-08 00:58:31
【问题描述】:

我一直在寻找一种在 Python 中使用其值对字典进行排序的方法,经过几次尝试后,结果如下:

a = {<populated dict...>}
a = {v: k for k, v in a.items()}
a = {v: k for k, v in sorted(a.items())}

这段代码似乎可以工作,但我认为它的性能很差,有没有更好的方法?

【问题讨论】:

标签: python python-3.x performance sorting dictionary


【解决方案1】:

你不需要做双键/值交换,你可以这样做:

a = {k: v for k, v in sorted(a.items(), key=lambda x: x[1])}

(sorted DOCS)

测试代码:

data = dict(a=1, b=3, c=2)
print(data)
data_sorted = {k: v for k, v in sorted(data.items(), key=lambda x: x[1])}
print(data_sorted)

结果:

来自 CPython 3.6:

{'a': 1, 'b': 3, 'c': 2}
{'a': 1, 'c': 2, 'b': 3}

【讨论】:

  • 这将如何对字典进行排序?
  • @PeterWood,在 CPython 3.6 和 Python 3.7+ 中订购了字典。
  • 我不喜欢它作为一种方法。插入排序是自 3.6 以来的一项功能,但 The order-preserving aspect of this new implementation is considered an implementation detail and should not be relied upon 来自 documentation
  • @newbie,您在技术上是正确的。然而,对于世界上 99% 的人来说,CPython 是 Python。至少对于这个特性,在 3.7 中它不再是一个实现细节。
【解决方案2】:
from collections import OrderedDict

否则按您想要的顺序创建一个键列表。

【讨论】:

    【解决方案3】:

    以下代码对我有用。不知道效率如何。

    sorted_list_by_value=sorted(data_dict, key=data_dict.__getitem__)
    

    【讨论】:

      【解决方案4】:

      默认情况下,字典是根据键排序的,但 sorted 函数将函数作为参数,您可以使用该函数更改 程序。

      d={'a':6,'b':4,'k':3}
      print(sorted(d)) 
      
      sorted_by_values= sorted(d,key=lambda x:d[x])
      print(sorted_by_values)
      

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多