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的值从我刚刚创建的列表中获取?
答案 0 :(得分:1)
python中的字典被实现为HashTables,它们是无序容器。 OrderedDict
将保留订单。
您可以在此处阅读OrderedDict
:
OrderedDict
答案 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
,它同时为您提供x
和newword[x]
。
OrderedDict
的文档为here。出于速度原因,传统的python词典是无序的。如果不满意,请使用课程OrderedDict
。