2017-06-17 39 views
-1

拉姆達我碰到下面的代碼,它是工作fine.Though我找了其他的問題lambda函數,但是沒有找到相關的答案使用帶有排序功能

In[9]: portfolio=[ 
        {'name': 'IBM', 'shares': 100, 'price': 91.1}, 
        {'name': 'IAM', 'shares': 100, 'price': 41.1}, 
        {'name': 'IBM', 'shares': 100, 'price': 71.1} , 
        {'name': 'IBM', 'shares': 100, 'price': 31.1} 
      ] 
In [10]: s = sorted(portfolio,key = lambda s : s['price']) 
Out[10]: s 
[{'name': 'IBM', 'price': 31.1, 'shares': 100}, 
{'name': 'IAM', 'price': 41.1, 'shares': 100}, 
{'name': 'IBM', 'price': 71.1, 'shares': 100}, 
{'name': 'IBM', 'price': 91.1, 'shares': 100}] 

問題:

  1. 是否每次從列表中調用字典元素時,調用lambda函數以返回價格? lambda只被調用一次?
  2. 如果任何人都可以在這裏解釋這整個是如何排序的作品,這將是非常有益的
+2

[Syntax behind sorted(key = lambda:)](https://stackoverflow.com/questions/8966538/syntax-behind-sortedkey-lambda) –

回答

2

好吧,讓我們試試吧:

portfolio = [ 
    {'name': 'IBM', 'shares': 100, 'price': 91.1}, 
    {'name': 'IAM', 'shares': 100, 'price': 41.1}, 
    {'name': 'IBM', 'shares': 100, 'price': 71.1} , 
    {'name': 'IBM', 'shares': 100, 'price': 31.1} 
] 

def key_fn(s): 
    print("called key_fn({}) -> {}".format(s, s['price'])) 
    return s['price'] 

s = sorted(portfolio, key=key_fn) 

產生

called key_fn({'shares': 100, 'price': 91.1, 'name': 'IBM'}) -> 91.1 
called key_fn({'shares': 100, 'price': 41.1, 'name': 'IAM'}) -> 41.1 
called key_fn({'shares': 100, 'price': 71.1, 'name': 'IBM'}) -> 71.1 
called key_fn({'shares': 100, 'price': 31.1, 'name': 'IBM'}) -> 31.1 

結論:對每個正在排序的項目調用一次關鍵函數。

+0

這個解釋對我有幫助。謝謝 –