我正在查看通過Python中的值排序字典的問題,並遇到了這個答案。這是什麼lambda函數做
sorted(d.items(), key=lambda x: x[1])
不過,我不明白這是什麼功能,究竟它是如何甚至有助於通過返回的元組或任何的列表爲此事
我正在查看通過Python中的值排序字典的問題,並遇到了這個答案。這是什麼lambda函數做
sorted(d.items(), key=lambda x: x[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)]
這拉姆達排序的字典接受列表/元組作爲一個參數,並返回關於第二地點的元件:x[1]
它可以用於列表進行排序,例如:
[['b',2], ['a',4], ['c',1]]
排序將使用lambda表達式提取每個列表中的第二個元素:2,4,1,並根據此元素對列表進行排序。
所以這個例子的輸出將在我們的例子:
[['c', 1], ['b', 2], ['a', 4]]
評論:此相同的排序可以被應用到列表中的任意序列與更超過2元!
大概你有一個字典,你想排序到列表中。
例如
{'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)
的函數的參數key
sorted
只允許你指定接受的項目(要排序列表)功能並返回您想要排序的值。
d.items()
是一個元組列表,它有兩個字段:(dict_key, dict_value)
。
和lambda x: x[1]
等於def anonymous_func(x): return x[1]
,所以在您的代碼中,列表(d.items()
)將按字段1(原始字典的值字段)排序。
'lambda'本身非常簡單;我認爲你的問題實際上是如何使用key參數。 – chepner