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 nativa sorted() 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 retorna None, sendo mais eficiente em consumo de memória.

  • Desempenho com itemgetter: A função itemgetter() do módulo nativo operator executa a extração da chave diretamente em nível C, sendo ligeiramente mais rápida que expressões lambda em listas com milhares de dicionários.

  • Ordem Decrescente com reverse=True: O parâmetro opcional reverse=True inverte 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 tipo KeyError. Para evitar isso em dados heterogêneos, utilize .get() dentro da lambda (ex: key=lambda x: x.get("idade", 0)).

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server