2014-01-13 66 views
-5

使用Python,如果我有這樣的名單:爲什麼Python按鍵打印字典列表?

cars = {'Honda': 'Civic', 'Audi': 'A4', 'Chevrolet': 'Camaro', 'Volkswagen': 'Passat', 'Jeep': 'Wrangler', 'Pontiac': 'G6'} 

Python 2.6中打印出來是這樣的:

print(cars) 
{'Pontiac': 'G6', 'Jeep': 'Wrangler', 'Chevrolet': 'Camaro', 'Honda': 'Civic', 'Volkswagen': 'Passat', 'Audi': 'A4'} 

的Python 3.3打印這樣的:

print(cars) 
{'Jeep': 'Wrangler', 'Honda': 'Civic', 'Pontiac': 'G6', 'Chevrolet': 'Camaro', 'Volkswagen': 'Passat', 'Audi': 'A4'} 

Python是怎樣確定印刷物品的順序?這是默認情況下,不首先排序列表。爲什麼兩個版本都不按原樣打印?這是如何完成的?

+3

首先,這是一個字典,而不是一個列表。其次,字典沒有訂購,所以你不能假定任何關於訂單的事情。你可以在這個網站上找到幾百個關於這個問題的重複問題。 – BrenBarn

+0

由於缺乏研究努力,你被低估了,但在我看來,這對初學者來說是一個很好的結果。保持。另外,BrenBarn回答了你的問題。 – keyser

+1

如果你真的想知道爲什麼,你可能會比看[這個]更糟糕(http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-the-mighty-dictionary-55 -3352147)。 – jonrsharpe

回答

1

最好的答案是:「不要用字典順序費心了。」

詞典不是有序類型。它們使用散列值來存儲值,並且不可排序(例如,如果調用sorted(dict),則返回list)。如果你需要有一個穩定的秩序,使用不承擔有關它的順序一本字典什麼

from collections import OrderedDict 

cars = OrderedDict({'Honda': 'Civic', 'Audi': 'A4', 'Chevrolet': 'Camaro',\ 
        'Volkswagen': 'Passat', 'Jeep': 'Wrangler', 'Pontiac': 'G6'}) 
#The order is now structured. You can sort it and use it as if it were ordered. 
+0

我會說最好的是:_Dictionaries是無序的,這意味着沒有特定的順序是保證,甚至沒有插入order_。或類似的東西。 – keyser

-1

日文N3 N4 N5是包含HashMap和打印的順序取決於迭代程序問題是隨機的,並且由密鑰的散列控制。

我懷疑在不同的python版本計算str散列方式上存在差異,dict的初始大小更可能不同,所以hash(key)%size_of_hashtable是不同的,所以鍵的排序方式不同。

PS。 adsmith是對的 - 不要打擾字典的命令。

== ==編輯

我試圖與P2/P3 CPython的執行源檢查,並坦率地說,我完全迷失了(我不喜歡C:P)。類型的字典已經進化那些版本之間的很多,有一些實驗用的緩存,初始大小等

最後,全回答是「因爲執行的dict對象這些版本之間變化」。

+0

我明白了,有人發現這個答案錯了​​,但我想知道爲什麼(爲了避免在未來給出錯誤的答案)。 –

0

the tutorial

最好是認爲字典作爲一個無序的鍵:值對...

的關鍵有無序。您可以在sorted(cars)的字典中獲得密鑰的排序列表。請注意,這不會將字典更改爲排序類型。它返回一個只有鍵的列表。

0

默認字典打印以隨機方式鍵,這樣你就永遠不知道他們怎麼會被打印出來。如果您想要打印鑰匙,您可以使用OrderedDict

+0

我記得,至少Python3基於它們的散列值打印穩定的字典,但它不代表任何東西.... –