2013-11-21 61 views
7

如何以我设置的原始顺序打印出我的字典?在python中打印字典的原始输入顺序

如果我有这样的字典:

smallestCars = {'Civic96': 12.5, 'Camry98':13.2, 'Sentra98': 13.8} 

和我这样做:

for cars in smallestCars: 
    print cars 

它输出:

Sentra98 
Civic96 
Camry98 

但我想是这样的:

Civic96 
Camry98 
Sentra98 

有没有办法打印原始字典的顺序,而无需将其转换为列表?

+2

那散列:)以任意顺序 – JoeC

回答

12

A 定期字典没有顺序。您需要使用collections模块,这可能需要一个列表的列表或元组的列表的OrderedDict,就像这样:

import collections 

key_value_pairs = [('Civic86', 12.5), 
        ('Camry98', 13.2), 
        ('Sentra98', 13.8)] 
smallestCars = collections.OrderedDict(key_value_pairs) 

for car in smallestCars: 
    print(car) 

,输出是:

Civic96 
Camry98 
Sentra98 
+1

由于没有排序,编辑我尝试过你的答案。它的工作原理,我没有修改我的代码检查比较密钥。再次感谢。 – user2989027

+0

我很高兴能帮到;) –

2

Dictionary不需要保持秩序。使用OrderedDict

1

当你创建字典时,python并不在意你写的元素的顺序,它不会记住对象创建后的顺序。你不能期望它(常规字典)以相同的顺序打印。改变你的代码结构是你在这里最好的选择,OrderedDict是其他人所说的一个很好的选择。

0
>>> for car in sorted(smallestCars.items(),key=lambda x:x[1]): 
...  print car[0] 
... 
Civic96 
Camry98 
Sentra98 
0

你可以使用一个元组(嵌套)阵列来做到这一点:

smallestCars = [['Civic86', 12.5], 
       ['Camry98', 13.2], 
       ['Sentra98', 13.8]] 

for car, size in smallestCars: 
    print(car, size) 

# ('Civic86', 12.5) 
# ('Camry98', 13.2) 
# ('Sentra98', 13.8)