2013-11-21 14 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

通常辞書には注文がありません。

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) 
、出力は次のとおりです:あなたはこのように、リストのリストやタプルのリストを取ることができ collectionsモジュールの OrderedDictを使用する必要が

Civic96 
Camry98 
Sentra98 
+1

おかげでソートされていない、私は編集の前にあなたの答えを試してみました。それはうまくいき、キーを比較するためにチェックしたところで自分のコードを変更する必要はありませんでした。再度、感謝します。 – user2989027

+0

私は助けることができてうれしいです;) –

2

辞書ではありません注文を維持する必要があります。 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) 
関連する問題