2017-07-13 247 views
-1

新詞典我有字典排序的字典鍵按字母順序,並創建排序鍵

my_dict={'VAR': '0x4225', 'CAR': '0x4100', 'SAR': '0x4005', 'AAR': '0x4220'} 

我想它的按鍵按字母順序排序和

my_dict_alphabetical_order ={'AAR': '0x4220', 'CAR': '0x4100', 'SAR': '0x4005', 'VAR': '0x4225'} 

我該怎麼辦呢?

+2

字典是沒有順序的數據結構。使用'collections.OrderedDict'或其他有序結構。 – jonrsharpe

+1

我的感覺是,CPython 3.6的字典作爲實現細節排列的事實對於字典應該是什麼而言非常混亂。 –

回答

6

你可以使用一個collections.OrderedDict - 這會記住所加入鍵的順序詞典:

>>> OrderedDict(sorted(my_dict.items())) 
OrderedDict([('AAR', '0x4220'), ('CAR', '0x4100'), ('SAR', '0x4005'), ('VAR', '0x4225')]) 
+0

OrderedDict不返回字典,是嗎? – Amit

+1

@Amit'OrderedDict'是'dict'的子類。這裏的操作有點棘手:'my_dict.items()'返回字典的(鍵,值)對的迭代器; 'sort()'按照字母數字順序對這些**對進行排序(即比較對的第一個值,然後對第二個值進行比較),並且由於第一個值是一個字符串,因此它們也按照字母數字順序排序。 'sorted'返回一個可迭代的,OrderedDict'構造函數作爲參數來構造實例。這一行給你的不是一個'dict'對象,而是'OrderedDict'對象。 –

+1

確切地說,'OrderedDict'擴展了'idct',所以你得到*是一本字典,但它更多。無論如何,其結果是你可以用它作爲字典,更具體地說,你可以像使用'myOrderedDict ['foo']''一樣調用它的鍵。 –

-2

編輯:這個答案是垃圾,但檢查下面的實際蟒蛇知識的意見。

IPython「自動執行」。

In [1]: my_dict={'VAR': '0x4225', 'CAR': '0x4100', 'SAR': '0x4005', 'AAR': '0x4220'} 

In [2]: my_dict 
Out[2]: {'AAR': '0x4220', 'CAR': '0x4100', 'SAR': '0x4005', 'VAR': '0x4225'} 

事情是,你爲什麼要這樣做與真正的字典?這些值的目的是通過它們的鍵來訪問,而不是它們的不敏感索引。

+2

_「它自動執行」_ - 不,我恐怕沒有。字典是鍵值對的無序集合。字典不會自動對鍵進行排序,因爲字典無法排序。 –

+0

不正確。字典是無序的。 –

+1

這是IPython(或Jupyter)愚弄你。它們覆蓋字典顯示的方式[按照「排序」順序顯示](https://github.com/ipython/ipython/blob/6.1.0/IPython/lib/pretty.py#L606)。 – MSeifert