Если у меня есть:
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 (во второй, отсортированной версии)? Кроме того, должен быть лучший способ организовать все это, поэтому предложение об этом будет с радостью принято!
Вы можете использовать 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]]]
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]]]