2012-11-20 70 views
1

我使用Python 2.5。我有一個名單列表的字典作爲值列表的內部列表的Python排序字​​典

{'a': [['6', 3]], 'b': [['5', 1], ['6', 5]], 'c': [['446', 2],['6', 11],['67', 86]] } 

我想第一個列表項的第二個元素進行排序,所以,上面會進行排序是這樣的:

'b': [['5', 1], ['6', 5]], 
'c': [['446', 2],['6', 11],['67', 86]] 
'a': [['6', 3]] 

有什麼建議麼?

感謝 斯科特

回答

4

字典本身是無序的,所以你不能對它進行排序本身。如果你想創建的鍵值對的排序列表,你可以這樣做:

sorted(myDict.iteritems(), key=lambda x: x[1][0][1]) 

iteritems返回(鍵,值)對的迭代,所以x[1][0][1]有指「利用這個第二個元素對(它是值),並取其中的第一個元素(它是列表中的第一個列表),並取其中的第二個元素---按順序排列,第一個列表中的第二個元素,它是你想要的。

+0

謝謝。很棒。而且,我終於準備好了lambda函數。 –

+0

'iteritems'不返回(鍵,值)對列表;它迭代一個這樣的對的惰性序列。如果你真的想要一個列表,你必須使用'items'(或者調用'list(myDict.iteritems())'。 – abarnert

1

字典沒有秩序。

然而,在被稱爲標準庫類保留插入順序的262678611。你可以創建一個這樣的:

>>> collections.OrderedDict(sorted(myDict.iteritems(), key=lambda x: x[1][0][1]) 
OrderedDict([('b', [['5', 1], ['6', 5]]), ('c', [['446', 2], ['6', 11], ['67', 86]]), ('a', [['5', 4]])]) 

myDict.iteritems()返回(key, value)tuple個序列。由key(您也可以使用items,這將返回序列的列表,而不是一個迭代器,但它會在Python 3工作,這iteritems不會。)

sorted排序。

key是一個函數,從這些tuple S的一個value,那value的第二個元素,而第二個元素,這是你想要的排序依據是什麼的第1個要素。

OrderedDict類並不在Python 2.5存在的,但它在純Python實現。如果您查看的是the docs,則可以鏈接到the code,您可以將其複製並粘貼到您的2.5程序中。或者,您可以使用借用到標準庫中的ActiveState配方,或者在PyPI上爲您找到一個模塊。