2015-05-25 97 views
0

我正在查看通過Python中的值排序字典的問題,並遇到了這個答案。這是什麼lambda函數做

sorted(d.items(), key=lambda x: x[1]) 

不過,我不明白這是什麼功能,究竟它是如何甚至有助於通過返回的元組或任何的列表爲此事

+0

'lambda'本身非常簡單;我認爲你的問題實際上是如何使用key參數。 – chepner

回答

1

讓我們創建一個示例字典。

d = {'e': 1, 'd': 2, 'c': 3, 'b': 4, 'a': 5} 

items將返回字典中的項作爲鍵,值元組對。

>>> d.items() 
[('a', 5), ('c', 3), ('b', 4), ('e', 1), ('d', 2)] 

「對自己只會在字典中的項進行排序:

>>> sorted(d) 
['a', 'b', 'c', 'd', 'e'] 

」`分類排序(d.items())`將排序鍵按升序詞典:

>>> sorted(d.items()) 
[('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)] 

但是,傳遞lambda函數使用對中的第二項(即值)作爲排序的基礎。 x表示元組對(例如('b',4),並且在這種情況下x [1]將表示4)。:

>>> sorted(d.items(), key=lambda x: x[1]) 
[('e', 1), ('d', 2), ('c', 3), ('b', 4), ('a', 5)] 

排序順序也可以顛倒:

>>> sorted(d.items(), key=lambda x: x[1], reverse=True) 
[('a', 5), ('b', 4), ('c', 3), ('d', 2), ('e', 1)] 
1

這拉姆達排序的字典接受列表/元組作爲一個參數,並返回關於第二地點的元件:x[1]

它可以用於列表進行排序,例如:

[['b',2], ['a',4], ['c',1]] 

排序將使用lambda表達式提取每個列表中的第二個元素:2,4,1,並根據此元素對列表進行排序。

所以這個例子的輸出將在我們的例子:

[['c', 1], ['b', 2], ['a', 4]] 

評論:此相同的排序可以被應用到列表中的任意序列與超過2元!

1

大概你有一個字典,你想排序到列表中。

例如

{'x': 5, 'y': 6}.items() # returns [(x, 5), (y, 6)] 

現在你也希望確保由值(5和6)排序此輸出列表 - 因爲這並不總是保證。

所以你把它傳遞到sort函數,並通過lambda,它明確指出你想如何排序這個列表。

例如,在你的情況是由每對列表中的x[1]的第二個值排序,但你也可以排序每對的第一個值x[0]

你也可以用常規更換拉姆達功能:

def sort_key(x): 
    return x[1] 

sorted(d.items(), key=sort_key) 
1

的函數的參數keysorted只允許你指定接受的項目(要排序列表)功能並返回您想要排序的值。

d.items()是一個元組列表,它有兩個字段:(dict_key, dict_value)

lambda x: x[1]等於def anonymous_func(x): return x[1],所以在您的代碼中,列表(d.items())將按字段1(原始字典的值字段)排序。