2016-02-10 45 views
2

這是一個有點難受,言傳,所以我將展示一個例子:創建列表類型的值從字典OrderedDict(列表中的值的順序)

我有什麼(data是一個字典實例):

data = {'a':[4,5,3], 'b':[1,0,2], 'c':[6,7,8]} 

我需要什麼(ordered_dataOrderedDict實例):

ordered_data = {'b':[0,1,2], 'a':[3,4,5], 'b':[6,7,8]} 

鍵的順序應該相對於在列表嵌套

+1

應該'ordered_data = {'b':[0,1,2],'a':[3,4,5],'b':[6, 7,8]}'''ordered_data = {'b':[0,1,2],'a':[3,4,5],'c':[6,7,8]}' – depperm

回答

2
tmp = {k:sorted(v) for k,v in data.items()} 
ordered_data = OrderedDict((k,v) for k,v in sorted(tmp.items(), key=lambda i: i[1])) 

首先排序的值改爲項目的順序。如果你不需要原始的data,可以做到這一點,但我做了一個臨時變量。

key是返回要排序的鍵的函數。在這種情況下,鍵是項目元組的第二個元素(列表),並且由於列表是可比較的,所以這已經足夠了。

+0

@ inspectorG4dget,它將在2或3中工作。'sorted'需要迭代。 – jpkotta

+0

你是對的!我的錯 – inspectorG4dget

-2

通常情況下,你不應該擔心在字典本身的數據順序,相反,僅僅指剛爲了它,當您檢索字典的內容(即:迭代它):

data = {'a':[4,5,3], 'b':[1,0,2], 'c':[6,7,8]} 
for datum in sorted(data.items(), key=lambda item: item[1]): 
    ... 
2

您可以使用OrderedDict通過排序您的項目和值:

>>> from operator import itemgetter 
>>> from collections import OrderedDict 
>>> d = OrderedDict(sorted([(k, sorted(v)) for k, v in data.items()], key=itemgetter(1))) 
>>> d 
OrderedDict([('b', [0, 1, 2]), ('a', [3, 4, 5]), ('c', [6, 7, 8])])