【问题标题】:python: is it possible to sort a dictionary by key?python:是否可以按键对字典进行排序?
【发布时间】:2019-01-10 01:19:45
【问题描述】:

上一个关于按键排序字典的堆栈溢出问题对python 3.6+提出了以下建议:

d={2:3,1:89,4:5,3:0}
b=dict(sorted(d.items()))
print(b)

正如预期的那样,输出如下:

{1: 89, 2: 3, 3: 0, 4: 5}

但是当我输入以下内容时

a={'1':1,'x':4,'z':-40023,'c':234}
c=dict(sorted(d.items()))
print(c) 

这是产生的输出: {'1': 1, 'c': 234, 'x': 4, 'z': -40023}

我的问题如下:

  1. 为什么这种方法适用于第一种情况而不适用于第二种情况。
  2. 为什么它只适用于 python3.6+ 而不是以前。他们是否改变了字典类的实现?
  3. 上面代码中的 b 是一个新的排序字典吗?如果是这样,我了解到哈希表从不排序,这怎么可能?

【问题讨论】:

  • dict 插入排序不是 Python 3.6+ 之前的东西 - 如果不能保证这一点,请不要在代码中依赖它。否则请参阅 OrderedDict,它存在于所有相关的 Python 版本中。
  • '1', 'c', 'x', 'z' 是正确的顺序
  • 3) 因为一些善意的谎言(忽略特定的实现细节/怪癖/功能,并且)更容易谈论通用 ADT,例如“地图”

标签: python sorting dictionary


【解决方案1】:
  1. 第二个示例排序正确。请参阅ASCII table 以验证数字是否位于字母之前。

  2. Python 3.6(特别是 CPython 实现)changed the way dictionaries 已实现。此更改的副作用是字典保留了元素插入顺序,这非常方便。这只是 3.6 中的一个副作用,但 BDFL decreed 认为此更改将成为从 3.7 版开始的语言的一项功能。

  3. 您上面的代码中的b 确实是一个新的dict,并且基于上面的第2 项,保留了插入顺序。在这种情况下,项目按排序顺序插入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 2021-06-28
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多