2013-02-10 47 views
0

我有一個像的Python百科排序

>>> x = {'a':2, 'c': 1, 'b':3} 

的字典中沒有字典可用的方法,通過值排序的字典。我整理它使用

>>> sorted_x = sorted(x.iteritems(), key=operator.itemgetter(1)) 
>>> sorted_x 
[('c', 1), ('a', 2), ('b', 3)] 

但現在當我轉換爲sorted_x通過使用循環再次字典。像

>>> new_dict = {} 
>>> for i in sorted_x: 
    new_dict[i[0]] = i[1] 
>>> new_dict 
{'a': 2, 'c': 1, 'b': 3} 

new_dict再次保持無序。爲什麼Python字典不能按鍵排序?任何人都可以闡明它。

+0

@LevLevitsky我用同樣的問題來解決我的問題,我問的是爲什麼字典總是未排序,如果我以排序的方式添加值。所以它不是重複的。:) – 2013-02-10 10:13:11

回答

2

辭書蟒蛇是哈希映射。密鑰被哈希以保持對元素的快速訪問。

這意味着內部元素必須根據它們生成的散列進行排序,而不取決於您想要給出的順序。

3

字典是未排序的。它們只是鍵和值之間的映射。

如果你想有一個排序的字典,使用collections.OrderedDict

>>> import collections 
>>> d = collections.OrderedDict(sorted_x) 
>>> d 
    OrderedDict([('c', 1), ('a', 2), ('b', 3)]) 
>>> d['c'] 
    1 
+0

是的!它有可能使用這種方式對字典進行排序,但我在問爲什麼詞典總是未排序,如果我按照排序的方式添加值。 – 2013-02-10 10:11:25

+0

因爲是哈希映射。這保證了快速查找(O(1))。正如攪拌機已經說過的,它們只是在鍵和值之間進行映射。該實現不保存順序,所以無論您向哪個方向添加值,都無關緊要 – Ant 2013-02-10 10:38:24