按顺序迭代字典并打印值

时间:2014-06-22 04:23:14

标签: python-2.7 dictionary

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

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

for key in stock:
    print key
    print 'prince: %s' % prices[key]
    print 'stock: %s' % stock[key]

运行此代码时的输出如下:

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

为什么不按字母中元素出现的顺序打印?例如,为什么不首先打印'banana',如下所示:

banana
price: 4
stock: 6

3 个答案:

答案 0 :(得分:1)

Python词典是无序的,这意味着他们不会记住您放入元素的顺序。This post有一些答案可能对您有所帮助,如果您正在寻找有关词典的更多信息。

您可以使用OrderedDict datatype创建一个有序的字典等效项。

答案 1 :(得分:1)

字典没有订单。字典的要点是通过程序员提供的密钥来获取项目,因此维护顺序没有意义;只要通过密钥快速轻松地获取项目。

OrderedDict会记住按键的插入顺序。

对于您的情况,最好重新安排数据:

stock = {'banana': {'price': 4, 'stock': 6}, 'apple': {'price': 2, 'stock': 0}}
for fruit, details in stock.iteritems():
    print('{0}'.format(fruit))
    print('Price: {0.price}'.format(details))
    print('Stock: {0.stock}'.format(details))

您也可以像这样使用元组:

stock = {'banana': (4, 6), 'apple': (2, 0)}
for fruit, details in stock.iteritems():
    price, stock = details
    print('{0}'.format(fruit))
    print('Price: {0}'.format(price))
    print('Stock: {0}'.format(stock))

答案 2 :(得分:0)

字典是一组无序的键:值对。他们没有秩序的概念。

如果您想要有序字典,可以查看OrderedDict。有序词典就像常规词典一样,但它们记住了项目的插入顺序。迭代有序字典时,项目按照其键首次添加的顺序返回。

请参阅:https://docs.python.org/2/library/collections.html

  

collections.OrderedDict