python:是否可以通过键对字典进行排序?

时间:2019-01-10 01:19:45

标签: python sorting dictionary

先前关于按键对字典排序的堆栈溢出问题对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是新排序的字典吗,如果是这样,当我得知哈希表从未排序时,这怎么可能?

1 个答案:

答案 0 :(得分:2)

  1. 第二个示例已正确排序。请参见ASCII table,以验证数字是否位于字母之前。

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

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