2013-11-21 62 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)