遍历字典

3

我的代码:

prices = {"banana": 4,"apple": 2,"orange": 1.5,"pear": 3}
stock = {"banana": 6,"apple": 0,"orange": 32,"pear": 15,}
for i in prices:
    print i
    print "price : %s" % prices[i]
    print "stock : %s" % stock[i]

我的输出是:

orange
price : 1.5
stock : 32
pear
price : 3
stock : 15
banana
price : 4
stock : 6
apple
price : 2
stock : 0
None 

我的问题是为什么输出结果从“橙子”开始打印,而不是从“香蕉”开始,然后是“苹果”、“橙子”和“梨子”?
3个回答

3

Python的字典是无序的,也就是说它们的键不按照字典序排序。如果你希望键总是有序的,请使用OrderedDict。否则,您还可以对列表进行排序,然后使用for i in sorted(prices):代替。


在我的例子中,我的理解是: 对于第一个循环 打印i等于打印香蕉 打印“price:%s”%prices [i]等于prices [banana]#关键字'Banana'的值stock [i]等于stock [banana] 这种理解是否不正确? - Govind chouhan
@Govindchouhan 是的,没错。当你迭代一个字典时,你基本上是在迭代它的“键”。由于这两个字典中的键是相同的,所以你可以很容易地使用“dictionary[key]”来访问值。 - Anshul Goyal

1

如果您需要使用有序字典,那么orderdict将非常适合您:

prices = {"banana": 4,"apple": 2,"orange": 1.5,"pear": 3}

stock = {"banana": 6, "apple": 0, "orange": 32,"pear": 15}

from collections import OrderedDict
from operator import itemgetter

prices1 = OrderedDict(sorted(prices.items(), key = itemgetter(0)))
stock1  = OrderedDict(sorted(stock.items() , key = itemgetter(0)))

#print(list(prices1.keys()))

for i in prices1:
    print(i)
    print("price : %s" % prices1[i])
    print("stock : %s" % stock1[i])

print(prices1)    
print(stock1)  

This gives:

apple
price : 2
stock : 0
banana
price : 4
stock : 6
orange
price : 1.5
stock : 32
pear
price : 3
stock : 15
OrderedDict([('apple', 2), ('banana', 4), ('orange', 1.5), ('pear', 3)])
OrderedDict([('apple', 0), ('banana', 6), ('orange', 32), ('pear', 15)])

0
Python 中的 dict 是无序的。
你可以先排序它们的键再使用:
for i in sorted(prices): # sorts the keys
    print i
    print "price : %s" % prices[i]
    print "stock : %s" % stock[i]

按字母顺序打印。

您还可以使用自己的自定义排序键,例如:

for i in sorted(prices, key=str.lower): # sorts the keys disregarding case
    print i
    print "price : %s" % prices[i]
    print "stock : %s" % stock[i]

编辑:

如果您需要一个有序字典,可以在collections库中找到一个实现。


我希望它按照存储顺序打印目录值,使用排序将使其按字母顺序打印。 - Govind chouhan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接