Неподдерживаемые типы операндов для +: 'int' и 'tuple'

Мне нужно выполнить задание, где мне дают список имен и оценок для каждого имени, и мне нужно отсортировать их по классам от высшего к низшему. Однако если два имени имеют одинаковые оценки, сортируйте их в алфавитном порядке. Это проблема, с которой я столкнулся. Я обязан держать функцию сортировки в одной строке.

a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]
sum(sorted(a,key=lambda x: x[1]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'tuple'

Любая идея о том, как это можно решить? Я пытался решить это в течение многих дней.

ОБНОВЛЕНО

Хорошо, спасибо, что помогли мне разобраться с этим, но есть и другой сценарий, который мне тоже нужно решить.

a = [('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
sorted(a,key=lambda x: -x[1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: bad operand type for unary -: 'str'

Так что это текущая ситуация, в основном все, что мне нужно сейчас сделать, - это организовать список так, чтобы он переходил от высшего к низшему классу.

2 ответа

Решение

Отметим, что sorted() вернет копию вашего оригинального списка, но отсортированный:

>>> a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]
>>> sorted(a,key=lambda x: x[1])
[('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88)]

Сам Python потерпит неудачу при попытке суммировать эти три кортежа, потому что он на самом деле не имеет четкого значения.

('Tim Jones', 54)
('Anna Smith', 56)
('Barry Thomas', 88)

Функция sorted() возвращает список кортежей. Таким образом, вы не можете суммировать их, потому что sum() предполагает получение последовательности чисел.

Второй - потому что у вас есть минус (-) перед x[1], а x[1] - строка. Вы не можете иметь отрицательную строку.

>>> a = [('Tim Jones', 'C'), ('Anna Smith', 'B'), ('Barry Thomas', 'A')]
>>> sorted(a,key=lambda x: x[1])

Если вы хотите отсортировать эти имена в алфавитном порядке, когда оценки одинаковы, используйте кортеж (x[1],x[0]) в качестве отсортированного ключа.

>>> a = [('Tim Jones', 54), ('Anna Smith', 56), ('Barry Thomas', 88),('Array Thomas', 88)]
>>> sorted(a,key=lambda x: (x[1],x[0]))
[('Tim Jones', 54), ('Anna Smith', 56), ('Array Thomas', 88), ('Barry Thomas', 88)]
Другие вопросы по тегам