Tenho alguns dados ou numa lista de listas ou numa lista de tuplos, como esta:
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
E eu quero ordenar pelo segundo elemento do subconjunto. Ou seja, ordenar por 2,5,8 onde 2
é de (1,2,3)
, 5
é de (4,5,6)
. Qual é a forma comum de fazer isto? Devo armazenar tuplos ou listas na minha lista?
Resposta de Stephen's é o que I'd usa. Para completar, aqui's o padrão DSU (decorate-sort-undecorate) com compreensões de lista:
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
Ou, mais concisamente:
[b for a,b in sorted((tup[1], tup) for tup in data)]
Como observado no Python Sorting HowTo, isto tem sido desnecessário desde Python 2.4, quando funções-chave se tornaram disponíveis.