Python 使用for循环创建字典

Python 使用for循环创建字典,python,dictionary,Python,Dictionary,我在使用Python 2.7代码时遇到问题: singlelower = string.ascii_lowercase lowerdict = {} for i in singlelower: lowerdict[i] = i 我希望它返回一个字典,其中每个键和值都是相似的,并且所有键都是按字母顺序排列的。它创建了字典,但顺序不正确,即使for循环应该按字母顺序遍历字符串。以下是输出: {'a': 'a', 'c': 'c', 'b': 'b', 'e': 'e', 'd': 'd'

我在使用Python 2.7代码时遇到问题:

singlelower = string.ascii_lowercase
lowerdict = {}
for i in singlelower:
     lowerdict[i] = i
我希望它返回一个字典,其中每个键和值都是相似的,并且所有键都是按字母顺序排列的。它创建了字典,但顺序不正确,即使for循环应该按字母顺序遍历字符串。以下是输出:

{'a': 'a', 'c': 'c', 'b': 'b', 'e': 'e', 'd': 'd', 'g': 'g', 'f': 'f', 'i': 'i', 'h': 'h', 'k': 'k', 'j': 'j', 'm': 'm', 'l': 'l', 'o': 'o', 'n': 'n', 'q': 'q', 'p': 'p', 's': 's', 'r': 'r', 'u': 'u', 't': 't', 'w': 'w', 'v': 'v', 'y': 'y', 'x': 'x', 'z': 'z'}

正如你所见,这本词典是成对的。我是否忽略了实现中的某些内容?

如果有令人信服的理由需要整理字典,请使用。它是dict的一个子类,因此它支持普通字典中的所有操作

from collections import OrderedDict
import string

lowerdict = OrderedDict()
for char in string.ascii_lowercase:
    lowerdict[char] = char


>>> print(lowerdict)
OrderedDict([('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd'), ('e', 'e'), ('f', 'f'), ('g', 'g'), ('h', 'h'), ('i', 'i'), ('j', 'j'), ('k', 'k'), ('l', 'l'), ('m', 'm'), ('n', 'n'), ('o', 'o'), ('p', 'p'), ('q', 'q'), ('r', 'r'), ('s', 's'), ('t', 't'), ('u', 'u'), ('v', 'v'), ('w', 'w'), ('x', 'x'), ('y', 'y'), ('z', 'z')])

字典天生就是无序的。你不会从他们那里得到任何字母顺序。你为什么需要这本字典?谢谢你指出这一点。我想它会保持元素的添加顺序,在这种情况下,它应该是字母顺序的(根据我的for循环),对吗?@cortman如果是这样的话,那么是的,它会按字母顺序输出。但字典的内容存储在引擎盖下的哈希表中,允许非常快速的访问,但没有保留的顺序。@Martijn Pieters-感谢添加链接,这更好地解释了我的问题。从本质上讲,Python将按照最高效的搜索和检索顺序对字典进行排序。