2014-12-10 2 views
1

У меня есть список кортежейСортировка списка кортежей со вторым элементом кортежа является списком

[("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])] 

Я хочу вывод:

[("Alice", [1, 2, 1, 1, 1, 1]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Bob", [3, 1, 5, 3, 2, 5]),("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])] 

Я хочу это путем сортировки кортежей на основе на сумму списков в них.

В настоящее время у меня есть:

c = sorted(b, key=lambda x: (x[0], sum(x[1]))) 
return c 

Любая помощь будет принята с благодарностью

+0

Есть ли у вас какие-либо идеи, что '(x [0], sum (x [1]))' делает? –

ответ

6

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

c = sorted(b, key=lambda x: sum(x[1])) 

Read more about sorting.

+1

Большое спасибо! Я буду отмечать как можно точнее! – FailedWolfhound

0
>>> lst=[("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])] 
>>> sorted(lst, key=lambda x:sum(x[1])) 
[('Alice', [1, 2, 1, 1, 1, 1]), ('Clare', [2, 3, 2, 2, 4, 2]), ('Bob', [3, 1, 5, 3, 2, 5]), ('Dennis', [5, 4, 4, 4, 3, 4]), ('Eva', [4, 5, 3, 5, 5, 3])] 
0

Если вам нужна сортировка, чтобы быть на месте (обновить список с отсортированными результатами):

x = [("Alice", [1, 2, 1, 1, 1, 1]), ("Bob", [3, 1, 5, 3, 2, 5]), ("Clare", [2, 3, 2, 2, 4, 2]), ("Dennis", [5, 4, 4, 4, 3, 4]), ("Eva", [4, 5, 3, 5, 5, 3])] 
x.sort(key=lambda i: sum(i[1])) 

Если вы хотите новый список с сортировочным результатом вы можете сделать это, как @Reut Sharabani предложил.