为什么字典键顺序与创建它的字符串不同?

时间:2013-12-02 03:59:55

标签: python dictionary

我想创建一个字典,将字母表中的所有字符作为键。我是通过以下方式做到的:

import string

origAlphabetUpCase = string.ascii_uppercase
print origAlphabetUpCase

upCaseDict = dict((el,'') for el in origAlphabetUpCase)

我得到的结果如下:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
{'A': '', 'C': '', 'B': '', 'E': '', 'D': '', 'G': '', 'F': '', 'I': '', 'H': '', 'K': '', 'J': '', 'M': '', 'L': '', 'O': '', 'N': '', 'Q': '', 'P': '', 'S': '', 'R': '', 'U': '', 'T': '', 'W': '', 'V': '', 'Y': '', 'X': '', 'Z': ''}

由于某种原因,键的顺序与初始字符串中的顺序不同。似乎交换了字符对(AZ除外)。

知道如何以及为什么会这样?

3 个答案:

答案 0 :(得分:0)

Python词典没有任何顺序。

来自docs

  

最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。

如果你进一步阅读,

  

字典对象的keys()方法以任意顺序返回字典中使用的所有键的列表(如果要对其进行排序,只需对其应用sorted()函数)。

因此,您可以使用sorted功能或OrderedDict

答案 1 :(得分:0)

最好将字典视为一组无序的键:值对,并要求键是唯一的(在一个字典中)。

字典上的主要操作是存储带有某个键的值并提取给定键的值,在列表中的哪个时间插入哪个元素可能无关紧要,它可能出现在列表中间或启动或者最后也是。给出了在docs.python.org中写的例子

>>> tel = {'jack': 4098, 'sape': 4139}
>>> tel['guido'] = 4127
>>> tel
{'sape': 4139, 'guido': 4127, 'jack': 4098}
>>> tel['jack']
4098
>>> del tel['sape']
>>> tel['irv'] = 4127
>>> tel
{'guido': 4127, 'irv': 4127, 'jack': 4098}

答案 2 :(得分:0)

字典是关键是可以清洗的元素。由于字典使用哈希表来有效查找键和这些键的值,因此排序不会被排序。

python中的一个集合也是无序的,因为集合中的元素是经过哈希处理的,因此查找很快

if 'z' in ('x','y','z'):
  return 'z'

如果是O(1)列表,则会查找O(n)['x','y','z']

以下来自python邮件列表的电子邮件非常重视python词典以及它们在技术细节方面所做的散列。

https://mail.python.org/pipermail/python-list/2000-March/048085.html