为什么我的输出已经在python中排序了

时间:2015-03-24 07:22:59

标签: python dictionary

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

我想问为什么它以这种方式显示(按排序顺序)。是不应该先吃香蕉,然后是苹果,橙子和梨?

5 个答案:

答案 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