创建字典时出现意外行为

时间:2014-11-01 23:27:25

标签: python dictionary

word = 'pythonist'

#splitting word into its alphabets
newword = []
for char in word:
    newword.append(char)

print newword

##########################

#creating the dict

d = {}
length = len(word)


for x in range(0,length):
    d["{0}".format(x)] = newword[x]

print d

如果您注意到字典键:值与字符串'pythonist'中的字母的顺序不同。是什么导致了这种行为?我想,这与创建字典的方式有关,因为我让dict的值从我刚刚创建的列表中获取?

3 个答案:

答案 0 :(得分:1)

python中的字典被实现为HashTables,它们是无序容器。 OrderedDict将保留订单。

您可以在此处阅读OrderedDictOrderedDict

答案 1 :(得分:0)

Python的词典未作为设计决定。您的词典是正确创建的,只是有关订单的信息丢失了。

答案 2 :(得分:0)

您的代码可以简化一点:

from collections import OrderedDict

word = 'pythonist'

d = OrderedDict()
for x, c in enumerate(word):
    d["{0}".format(x)] = c

print d

此代码生成输出:

OrderedDict([('0', 'p'), ('1', 'y'), ('2', 't'), ('3', 'h'), ('4', 'o'), ('5', 'n'), ('6', 'i'), ('7', 's'), ('8', 't')])

正如您所见,OrderedDict的礼貌,输出是有序的。

注释

  • 无需将word拆分为newword。在python中,字符串本身就是可迭代的。

  • 在计算机编程中,经常需要这样的结构:

    for x in range(0,length):
        d["{0}".format(x)] = newword[x]
    

    出于这个原因,python创建了enumerate,它同时为您提供xnewword[x]

  • OrderedDict的文档为here。出于速度原因,传统的python词典是无序的。如果不满意,请使用课程OrderedDict