Сортировать список списков по сумме N-го элемента внутренних списков

1

Если у меня есть:

a = [[['Q1', 20], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q3', 24], ['R1', 14]]]

как сортировать так, что я получаю: a

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

потому что сумма вторых элементов списков в этих кортежах составляет соответственно 38, 35 и 34 (во второй, отсортированной версии)? Кроме того, должен быть лучший способ организовать все это, поэтому предложение об этом будет с радостью принято!

Теги:
list
sorting
tuples

2 ответа

1
Лучший ответ

Вы можете использовать sorted sum:

a = [[['Q1', 20], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q3', 24], ['R1', 14]]]
new_a = sorted(a, key=lambda x:sum(c for _, c in x), reverse=True)

Выход:

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

Изменение: чтобы удалить списки, сумма которых равна значению, превышающему заданную переменную, вы можете использовать понимание списка:

final_result = [i for i in new_a if sum(c for _, c in i) < 36]

Выход:

[[['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]
  • 0
    Спасибо за ответ! Теперь мне интересно, как бы я мог вырезать определенные пары, сумма которых превышает определенное число, скажем, 36 в этом примере.
  • 0
    @aaron Пожалуйста, смотрите мои последние изменения.
Показать ещё 1 комментарий
1

IIUC, используйте key arg + reverse=True из sorted.

>>> sorted(a, key=lambda x: sum(i[1] for i in x), reverse=True)

[[['Q3', 24], ['R1', 14]], [['Q2', 18], ['R2', 17]], [['Q1', 20], ['R1', 14]]]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню