Mam listę krotek, które wyglądają mniej więcej tak:
("Person 1",10)
("Person 2",8)
("Person 3",12)
("Person 4",20)
Chcę, aby powstała lista posortowana w porządku rosnącym według drugiej wartości krotki. Więc L [0] powinno być ("Person 2", 8)
po sortowaniu.
Jak mogę to zrobić? Korzystanie z Pythona 3.2.2 Jeśli to pomaga.
Odpowiedzi:
Możesz użyć tego
key
parametru, abylist.sort()
:my_list.sort(key=lambda x: x[1])
lub nieco szybciej,
my_list.sort(key=operator.itemgetter(1))
(Podobnie jak w przypadku każdego modułu, musisz
import operator
mieć możliwość korzystania z niego.)źródło
L.sort(key=operator.itemgetter(1))
w moim kodzie, ale otrzymałem NameError, że „operator” nie jest zdefiniowany. Czy muszę importować coś specjalnego?import operator
aby użyć funkcji. Jeśli dodasz to do swojej odpowiedzi, oznaczę ją jako zaakceptowaną.A jeśli używasz Pythona 3.X, możesz zastosować tę
sorted
funkcję na liście mylist. To tylko dodatek do odpowiedzi, której @Sven Marnach udzielił powyżej.# using *sort method* mylist.sort(lambda x: x[1]) # using *sorted function* sorted(mylist, key = lambda x: x[1])
źródło
sorted
zamiastlist.sort
.def findMaxSales(listoftuples): newlist = [] tuple = () for item in listoftuples: movie = item[0] value = (item[1]) tuple = value, movie newlist += [tuple] newlist.sort() highest = newlist[-1] result = highest[1] return result movieList = [("Finding Dory", 486), ("Captain America: Civil War", 408), ("Deadpool", 363), ("Zootopia", 341), ("Rogue One", 529), ("The Secret Life of Pets", 368), ("Batman v Superman", 330), ("Sing", 268), ("Suicide Squad", 325), ("The Jungle Book", 364)] print(findMaxSales(movieList))
wyjście -> Rogue One
źródło