2016-02-29 88 views
-4

我正在尋找一些東西來按照Python中的值和鍵對列表進行排序。我發現這個:按值和鍵排序

list.sort(key=lambda (k, v): (-v, k)) 

這個lambda函數是如何工作的?

+0

那麼你的疑惑是什麼?你做了什麼來澄清它們?例如,你是否嘗試過在解釋器中測試它? – jonrsharpe

+0

你想對'key'或'value'字典進行排序嗎? –

+0

我想按值對列表進行排序,然後按鍵排序具有相同值的列表。我不明白的是-v,因爲我沒有這樣做過 - 我覺得列表只是按值排序的。 –

回答

1

校正。 list不包含在key,value對中的值。 keyvalue對存在於字典中。下面是用於字典排序上的值,然後對鍵的代碼:

>>> d = {'apple': 2, 'banana': 3, 'almond':2 , 'beetroot': 3, 'peach': 4} 
>>> sorted(d.iteritems(), key=lambda(k, v): (-v, k)) 
[('peach', 4), ('banana', 3), ('beetroot', 3), ('almond', 2), ('apple', 2)] 

說明: d.iteritems()返回iterator對象。在sorted(d.iteritems(), key=lambda(k, v): (-v, k)),key=lambda(k, v): (-v, k)意思是首先基於值的遞減順序,即-v然後按升序排列,即k

同樣的邏輯適用於問題中提到的排序列表的代碼。

+0

我認爲OP需要一個解釋 - 而不是演示。 –

+0

更新的答案與解釋。 –

2

它按一對值排序列表。由於它正在對列表進行排序,因此不存在任何鍵值對,但是有更多的兩個值彼此相鄰。 它被寫入的方式按照相反的第二個值排序,然後按正常升序排序第一個值。

這證明:

l1 = [[2,2],[3,1],[1,2],[4,1]] 

l1.sort(key=lambda(k,v):(-v,k)) 

l1 
=> [[1, 2], [2, 2], [3, 1], [4, 1]]