ключ= лямбда (идентификатор пользователя, num_friends): num_friends

#python #sorting #lambda

#python #сортировка #лямбда

Вопрос:

Я попытался запустить этот код

 #create a list (user_id, number_of_friends)
num_friends_by_id = [(user["id"], number_of_friends(user))
for user in users]
sorted(num_friends_by_id, # get it sorted
key=lambda (user_id, num_friends): num_friends, # by num_friends
reverse=True) # largest to smallest
# each pair is (user_id, num_friends)
# [(1, 3), (2, 3), (3, 3), (5, 3), (8, 3),# (0, 2), (4, 2), (6, 2), (7, 2), (9, 1)]
 

Но это всегда выдает мне эту ошибку

 File "C:/Users/jaide/Desktop/Ramdom.ipynb", line 41
    key=lambda (user_id, num_friends): num_friends, # by num_friends
               ^
SyntaxError: invalid syntax
 

Любая помощь?

Комментарии:

1. вероятно, вам просто нужно lambda user_id, num_friends: num_friends , но это недопустимая ключевая функция, которой будет передан только один аргумент, поэтому вы обмениваете SyntaxError на возможную ошибку времени выполнения

2. Python 2 позволил вам распаковать аргумент последовательности; Python 3 удалил его (IIRC, потому что он был сочтен не стоящим сложности, которую он добавил к синтаксическому анализатору).

3. Не стоит сложности, которую это добавило к самоанализу.

Ответ №1:

Синтаксис для лямбда-функции следующий: lambda arguments : expression . Итак, в вашем коде неправильный синтаксис из-за скобок.

Другая ошибка заключается в том, key что аргумент в sorted функции принимает вызываемый объект или лямбда-выражение с ОДНИМ аргументом. То, что вы сделали, — это попытались распаковать значение элемента, переданного в лямбда-выражение, а затем отсортировать его по второму аргументу. Но вы не можете выполнить распаковку в аргументах лямбда-функции. Вместо этого, поскольку мы знаем, что каждый элемент в вашем списке является кортежем, где первым элементом является user_id, а вторым — num_friends , мы можем получить доступ ко второму элементу каждого кортежа по индексу 1 (нулевая индексация). И с помощью этого мы можем отсортировать список по num_friends:

 sorted(num_friends_by_id, key=lambda x: x[1], reverse=True)
 

Комментарии:

1. Похоже, что ваш аргумент в первом абзаце lambda user_id, num_friends: expression также имеет неправильный синтаксис из-за запятой.

2. лямбда-функции могут иметь несколько аргументов. В случае key аргумента для sorted функции лямбда-функции требуется только один аргумент. Который я указал во втором разделе…