Como Ordenar Uma Lista de Dicionários Por Uma Chave Específica em Python
Como Ordenar Uma Lista de Dicionários Por Uma Chave Específica em Python
Classificar coleções de dados estruturados é uma necessidade diária no desenvolvimento de software, como ao ordenar registros do banco de dados ou preparar respostas JSON para APIs. Em Python, essa tarefa é realizada de forma nativa e eficiente utilizando a função
sorted() combinada com uma função lambda ou o módulo operator.itemgetter. A solução permite ordenar listas complexas em poucas linhas de código sem modificar os dados originais.Python
from operator import itemgetter
# Lista de dicionários para exemplo
usuarios = [
{"nome": "Carlos", "idade": 32, "pontos": 150},
{"nome": "Ana", "idade": 25, "pontos": 300},
{"nome": "Beatriz", "idade": 28, "pontos": 200}
]
# --- Abordagem 1: Usando lambda (Ideal para casos simples) ---
# Ordena por 'idade' em ordem crescente (padrão)
usuarios_por_idade = sorted(usuarios, key=lambda x: x["idade"])
print("--- Ordenado por idade (Crescente) ---")
print(usuarios_por_idade)
# --- Abordagem 2: Usando operator.itemgetter (Melhor performance) ---
# Ordena por 'pontos' em ordem decrescente (reverse=True)
usuarios_por_pontos = sorted(usuarios, key=itemgetter("pontos"), reverse=True)
print("\n--- Ordenado por pontos (Decrescente) ---")
print(usuarios_por_pontos)
# --- Abordagem 3: Modificando a lista original no local com .sort() ---
# Reordena a lista original sem criar uma nova variável na memória
usuarios.sort(key=lambda x: x["nome"])
print("\n--- Lista original ordenada por nome (A-Z) ---")
print(usuarios)
Pontos-chave
sorted()vs.sort(): A função nativasorted()gera e retorna uma nova lista contendo os elementos ordenados (mantendo a original intacta). Já o método.sort()modifica a lista no próprio local (in-place) e retornaNone, sendo mais eficiente em consumo de memória.- Desempenho com
itemgetter: A funçãoitemgetter()do módulo nativooperatorexecuta a extração da chave diretamente em nível C, sendo ligeiramente mais rápida que expressõeslambdaem listas com milhares de dicionários. - Ordem Decrescente com
reverse=True: O parâmetro opcionalreverse=Trueinverte a ordenação padrão (que é crescente para números e alfabética para strings). - Tratamento de Chaves Ausentes: Caso algum dicionário da lista não possua a chave especificada no parâmetro
key, o Python lançará uma exceção do tipoKeyError. Para evitar isso em dados heterogêneos, utilize.get()dentro da lambda (ex:key=lambda x: x.get("idade", 0)).

Comentários
Postar um comentário