prices = {
"banana": 4,
"apple": 2,
"orange": 1.5,
"pear": 3
}
stock = {
"banana": 6,
"apple" : 0,
"orange": 32,
"pear": 15
}
for item in prices:
print item
print "price: %s" % prices[item]
print "stock: %s" % stock[item]
以下代码的输出提供以下输出
orange
price: 1.5
stock: 32
pear
price: 3
stock: 15
banana
price: 4
stock: 6
apple
price: 2
stock: 0
None
我想问为什么它以这种方式显示(按排序顺序)。是不应该先吃香蕉,然后是苹果,橙子和梨?
答案 0 :(得分:1)
它没有排序。您使用字典来存储数据。 Python中的标准词典是无序的。它们基本上是连接到值的键的哈希映射。您看到的顺序是dict的hashmap中键的顺序。
答案 1 :(得分:1)
Python有一个内置的排序例程。此Stack Overflow帖子中有关于Pythons默认例程的更多信息 Python Sort Algorithm
答案 2 :(得分:1)
无序字典很可能实现为hash table(事实上,Python documentation完全陈述这一点),其中元素的顺序是明确定义的,但不是很明显。您的观察完全符合哈希表的规则:明显的任意,但是不变的顺序。
感谢@ konrad-rudolph
答案 3 :(得分:1)
dict
不保证排序,基本上是Hash Table。
订单基于hash()
函数,您可以在解释器中查看:
>>> hash('orange') < hash('pear')
True
要按照实际排序的顺序打印密钥,请在迭代密钥时使用OrderedDict或应用sorted()
:
for item in sorted(prices.keys()):
...
答案 4 :(得分:0)
Python Dict
没有订单。所以你可以使用OrderedDict
from collections import OrderedDict
for i, j in OrderedDict(sorted(prices.items(), key=lambda x:x[1])).items():
print i, j
orange 1.5
apple 2
pear 3
banana 4