Duas maneiras simples de classificar dicionários Python

introdução

Dicionário é uma importante estrutura de dados que armazena dados mapeando chaves e valores. O dicionário padrão em Python é uma estrutura de dados não ordenada. Assim como as listas, podemos classificar dicionários por chave usando a função sorted(). Porém, ele retorna apenas uma lista ordenada por chave, o que normalmente não é o que desejamos. Podemos querer que ele classifique por valor em vez de chave, ou podemos querer que ele retorne um dicionário classificado em vez de uma lista. Neste artigo, discutirei dois métodos simples que podemos usar para classificar um dicionário Python e retornar os resultados desejados.

Faça uma lista

Já que estamos falando sobre classificação, quero primeiro salientar uma diferença muito importante entre essas duas funções de classificação. Vejamos as diferenças entre as listas. Digamos que temos duas listas:

Temos duas maneiras de classificar uma lista, uma é a classificação no local usando sort() e a outra é usando sorted() que não é a classificação no local. A diferença é que ao usar sort() você altera a lista original, enquanto sorted() retorna uma nova lista sem alterar a lista original. Do seguinte modo:

Qual escolher depende da situação real. Por exemplo, se quiser manter os registros originais, você deve usar sorted(). Se quiser economizar espaço e memória, você deve usar sort().

Organize um dicionário

Vamos criar um dicionário:

A função "zip" é muito conveniente aqui, mapeamos elementos de duas listas do mesmo comprimento juntas.

Para classificar um dicionário, temos que usar sorted(), pois os dicionários não possuem uma função sort() integrada:

Se usarmos sorted() diretamente, a função retornará apenas a lista de chaves no dicionário:

Ou uma lista de valores:

Podemos chamar a função items() no dicionário para classificá-la por chave e retornar uma lista de tuplas:

Se quisermos classificar as chaves na ordem inversa, podemos especificá-lo na função sort:

E se quisermos classificar por valor? Existem duas maneiras de fazer isso. Uma é usar sorted(), mas especificar a chave para usar a função lambda para classificação; a outra é não usar o tipo de dicionário padrão, mas usar um tipo de dicionário diferente para classificar o dicionário diretamente por valor.

Para o primeiro método, a função classificada usa um parâmetro chave que especifica a função (ou outra função que pode ser chamada) a ser chamada em cada elemento antes da comparação. Aqui, podemos usar a função lambda para informar à função sorted() qual parte do elemento usar para comparação. Especificamente:

Python é indexado em zero, então x[1] especifica que a segunda parte de cada elemento é um dicionário, que é o valor. Se você quiser uma ordem reversa, em vez de adicionar um argumento reverso à função sorted(), podemos usar um sinal de menos na função lambda:

No entanto, esta técnica só funciona se value for uma variável numérica. Se for uma variável string, temos que usar o argumento reverso.

Se você tiver um dicionário com valores numéricos, também poderá usar diferentes tipos de dicionário para classificar o dicionário diretamente ao criá-lo. O tipo de dicionário pode ser Counter da biblioteca de coleções:

Counter é uma subclasse de dict, que é uma coleção não ordenada na qual os elementos são armazenados como chaves de dicionário e suas contagens são armazenadas como valores de dicionário.

Ao criar um contador, use o seguinte código:

Em vez de criar um dicionário padrão, criamos um Contador. Isso é útil porque quando queremos classificar um dicionário por valor, podemos usar a função most_common():

É útil quando você deseja retornar uma lista de tuplas classificadas por valor em ordem decrescente.

A biblioteca de coleções possui outros tipos de dados interessantes, como OrderedDict, que preserva a ordem de cada item inserido. Para obter mais informações, verifique este URL: https://docs.python.org/2/library/collections.html#.

Retorna um dicionário classificado

Normalmente, após a classificação, obtemos uma lista ordenada de tuplas. Se quiser que apareça como um dicionário, você pode usar uma expressão de dicionário para fazer o trabalho, que funciona como uma expressão de lista:

· FIM ·

VIDA FELIZ

Supongo que te gusta

Origin blog.csdn.net/weixin_38739735/article/details/117005077#comments_28608601
Recomendado
Clasificación