Pular para o conteúdo

Como ordenar dicionários no Python

CodeMDD.io

Ordenando um Dicionário em Python

por Ian Currie (data-structures)

Para ordenar os pares de chave-valor de um dicionário em Python, existem várias maneiras de abordar esse problema. Neste tutorial, você aprenderá diferentes métodos e técnicas para realizar essa tarefa.

Entendendo a Ordem dos Dicionários em Python

Antes do Python 3.6, os dicionários eram considerados intrinsecamente “desordenados”. Um dicionário em Python é uma implementação de uma tabela de hash, que tradicionalmente é uma estrutura de dados sem ordem definida.

No entanto, a partir da versão 3.6 do Python, os dicionários começaram a manter a ordem de inserção dos elementos. A partir da versão 3.7, essa ordem de inserção foi garantida. Isso significa que, ao iterar sobre um dicionário, você pode esperar que os elementos sejam retornados na mesma ordem em que foram inseridos.

Ordenando Dicionários em Python

Agora que você entende a ordem dos dicionários em Python, vamos discutir como ordená-los de acordo com as chaves ou valores.

Usando a função sorted()

Você pode usar a função sorted() para ordenar um dicionário com base nas chaves. Veja o exemplo abaixo:

dicionario = {"b": 2, "a": 1, "c": 3}
chaves_ordenadas = sorted(dicionario) # Retorna uma lista de chaves ordenadas

Neste exemplo, o dicionário inicial tem três pares de chave-valor: “b”: 2, “a”: 1 e “c”: 3. Ao passar o dicionário para a função sorted(), uma lista de chaves ordenadas é retornada: [“a”, “b”, “c”].

Obtendo Chaves, Valores ou Ambos de um Dicionário

Além disso, você pode usar os métodos keys(), values() e items() para obter uma visão das chaves, valores ou ambos do dicionário:

dicionario = {"b": 2, "a": 1, "c": 3}
chaves = dicionario.keys() # Retorna uma visão das chaves do dicionário
valores = dicionario.values() # Retorna uma visão dos valores do dicionário
itens = dicionario.items() # Retorna uma visão dos pares chave-valor do dicionário

Esses métodos retornam uma visão dos elementos do dicionário, que podem ser usados para ordenar o dicionário de acordo com as chaves ou valores.

Entendendo como o Python Ordena Tuplas

Quando você usa a função sorted() em um dicionário ou em uma visão das chaves, valores ou itens do dicionário, o Python ordena as chaves com base em seus valores associados.

No entanto, se você deseja personalizar a ordenação de acordo com um critério específico, você pode usar o parâmetro key da função sorted() e funções lambda.

Usando o Parâmetro key e Funções Lambda

A função sorted() aceita o parâmetro key, que permite especificar uma função personalizada para extrair um valor de cada elemento a ser ordenado. Você pode usar uma função lambda para isso.

Por exemplo, se você quiser ordenar um dicionário com base nos valores associados às chaves em ordem decrescente, você pode fazer o seguinte:

dicionario = {"b": 2, "a": 1, "c": 3}
chaves_ordenadas = sorted(dicionario, key=lambda chave: dicionario[chave], reverse=True)

Neste exemplo, a função lambda lambda chave: dicionario[chave] extrai os valores associados a cada chave do dicionário. Em seguida, a função sorted() ordena as chaves com base nesses valores em ordem decrescente.

Selecionando um Valor Aninhado com uma Chave de Ordenação

Além disso, você pode selecionar um valor aninhado dentro do dicionário e usá-lo como chave de ordenação. Veja o exemplo abaixo:

dicionario = {"b": {"x": 2}, "a": {"x": 1}, "c": {"x": 3}}
chaves_ordenadas = sorted(dicionario, key=lambda chave: dicionario[chave]["x"])

Neste exemplo, a função lambda lambda chave: dicionario[chave]["x"] extrai o valor “x” de cada subdicionário associado a cada chave. Em seguida, a função sorted() ordena as chaves com base nesses valores.

Considerando Questões Estratégicas e de Desempenho

Ao ordenar dicionários em Python, é importante considerar questões estratégicas e de desempenho.

Usando Funções Getter Especiais para Aumentar o Desempenho e Legibilidade

Para obter um desempenho melhor e tornar o código mais legível, você pode usar funções getter especiais, como itemgetter(), para extrair valores de um dicionário. Essa abordagem pode ser mais eficiente do que usar uma função lambda.

Medindo o Desempenho ao Usar itemgetter()

Se você estiver preocupado com o desempenho, pode medir o tempo de execução ao usar a função itemgetter() em comparação com outras abordagens. Isso ajudará você a determinar qual método é mais eficiente para o seu caso de uso específico.

Julgando se Você Deseja Usar um Dicionário Ordenado

Embora seja possível ordenar dicionários em Python, essa não é uma prática comum. Antes de decidir usar um dicionário ordenado, é importante considerar se há outras estruturas de dados mais adequadas para o seu caso de uso.

Comparando o Desempenho de Diferentes Estruturas de Dados

Além disso, é interessante comparar o desempenho de diferentes estruturas de dados para o seu caso de uso específico. Por exemplo, você pode comparar o desempenho de dicionários ordenados com listas de tuplas ou outras estruturas de dados.

Comparando o Desempenho da Ordenação

Também é importante comparar o desempenho da ordenação de diferentes abordagens. Dependendo do tamanho do dicionário e da complexidade da função de ordenação, pode haver diferenças significativas no tempo de execução.

Comparando o Desempenho das Buscas

Por fim, é útil comparar o desempenho das buscas em diferentes abordagens. Algumas estruturas de dados podem ser mais eficientes do que outras na recuperação de valores com base em chaves.

Conclusão

Neste tutorial, você aprendeu diferentes métodos e técnicas para ordenar dicionários em Python. Você viu como usar a função sorted(), como obter visões das chaves, valores ou itens do dicionário e como usar funções lambda e o parâmetro key para personalizar a ordenação. Além disso, você considerou questões estratégicas e de desempenho ao usar dicionários ordenados e comparou o desempenho de diferentes abordagens e estruturas de dados.

Lembre-se de que ordenar um dicionário em Python pode não ser uma prática comum e, em muitos casos, outras estruturas de dados podem ser mais adequadas. Portanto, é importante avaliar suas necessidades e considerar as vantagens e desvantagens de cada abordagem antes de decidir qual método usar.