我想知道为什么这段代码的输出不符合事物列表。输出时,代码为{0: 0, 2.0: 0.5, 4: 1, 5: 1}
而不是{4: 1, 5: 1, 2.0: 0.5, 0: 0}
。谢谢你的帮助。
ctr = 0
rtc = 1
things = [4,5,2.0,0]
d = {}
#block 1
while ctr < len(things):
d[things[ctr]] = things[ctr] / 4
ctr += 1
print d
答案 0 :(得分:0)
使用标准的Python字典,无法保证元素将按插入顺序保留。您应该使用
如果您想要这种行为,请从集合包中OrderedDict
。
对于Python 2.7,请参阅
中OrderedDict集合的官方文档https://docs.python.org/2/library/collections.html#collections.OrderedDict
您的示例,已修改:
import collections
ctr = 0
rtc = 1
things = [4,5,2.0,0]
d = collections.OrderedDict()
while ctr < len(things):
d[things[ctr]] = things[ctr] / 4
ctr += 1
print d
输出:
OrderedDict([(4,1),(5,1),(2.0,0.5),(0,0)])
按键访问元素类似于普通的字典:
print d[4]
print d[2.0]
分别给出1和0.5。
答案 1 :(得分:0)
正如其他人所指出的那样,python词典并不保证可以按照与插入顺序相同的顺序访问这些项目。这是因为python列表和字典是不同的数据结构,每个数据结构都有自己的检索值的方法。如果您对此感兴趣,请查看这个惊人的video以了解字典项的存储和检索方式,以及不保留订单的原因。
如果您只想根据things
中的项目打印或访问字典中的项目,除了Ordereddict
之外,还有以下几个选项。
列表理解
>>> print [(key, d[key]) for key in things]
[(4, 1), (5, 1), (2.0, 0.5), (0, 0)]
>>> print "{ %s }" % ", ".join(["%s : %s" % (key, d[key]) for key in d])
{ 0 : 0, 2.0 : 0.5, 4 : 1, 5 : 1 }
您还可以根据things
列表
>>> print sorted(d.items(), key = lambda x: things.index(x[0]))
[(4, 1), (5, 1), (2.0, 0.5), (0, 0)]