Использование лямбды с отсортированной функцией
Я наткнулся на следующий код, и он работает нормально. Хотя я искал лямбда-функции в других вопросах, но не нашел соответствующего ответа
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 ответ
Решение
Что ж, давайте попробуем это:
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
Вывод: ключевая функция вызывается один раз для каждого сортируемого элемента.