Compreensão do dicionário Python

Neste tutorial, aprenderemos sobre a compreensão do dicionário Python e como usá-lo com a ajuda de exemplos.

Dicionários são tipos de dados em Python que nos permitem armazenar dados no par chave / valor . Por exemplo:

 my_dict = (1: 'apple', 2: 'ball') 

Para saber mais sobre eles visite: Dicionário Python

O que é compreensão de dicionário em Python?

A compreensão de dicionário é uma forma elegante e concisa de criar dicionários.

Exemplo 1: compreensão do dicionário

Considere o seguinte código:

 square_dict = dict() for num in range(1, 11): square_dict(num) = num*num print(square_dict) 

Agora, vamos criar o dicionário no programa acima usando a compreensão de dicionário.

 # dictionary comprehension example square_dict = (num: num*num for num in range(1, 11)) print(square_dict) 

A saída de ambos os programas será a mesma.

 (1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100)

Em ambos os programas, criamos um dicionário square_dictcom par chave / valor número-quadrado .

No entanto, usar a compreensão de dicionário nos permitiu criar um dicionário em uma única linha .

Usando a compreensão do dicionário

A partir do exemplo acima, podemos ver que a compreensão do dicionário deve ser escrita em um padrão específico.

A sintaxe mínima para compreensão do dicionário é:

 dicionário = (chave: valor para vars em iterável) 

Vamos comparar essa sintaxe com a compreensão do dicionário do exemplo acima.

Agora, vamos ver como podemos usar a compreensão de dicionário usando dados de outro dicionário.

Exemplo 3: como usar a compreensão de dicionário

 #item price in dollars old_price = ('milk': 1.02, 'coffee': 2.5, 'bread': 2.5) dollar_to_pound = 0.76 new_price = (item: value*dollar_to_pound for (item, value) in old_price.items()) print(new_price) 

Resultado

 ('leite': 0,7752, 'café': 1,9, 'pão': 1,9) 

Aqui, podemos ver que recuperamos os preços dos itens em dólares e os convertemos em libras. Usar a compreensão do dicionário torna essa tarefa muito mais simples e curta.

Condicionais na compreensão do dicionário

Podemos personalizar ainda mais a compreensão do dicionário adicionando condições a ele. Vejamos um exemplo.

Exemplo 4: Se compreensão condicional do dicionário

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) even_dict = (k: v for (k, v) in original_dict.items() if v % 2 == 0) print(even_dict) 

Resultado

 ('jack': 38, 'michael': 48) 

Como podemos ver, apenas os itens com valor par foram adicionados, por causa da ifcláusula na compreensão do dicionário.

Exemplo 5: compreensão de dicionário múltipla se condicional

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict = (k: v for (k, v) in original_dict.items() if v % 2 != 0 if v < 40) print(new_dict) 

Resultado

 ('john': 33) 

Nesse caso, apenas os itens com um valor ímpar inferior a 40 foram adicionados ao novo dicionário.

É por causa das múltiplas ifcláusulas na compreensão do dicionário. Eles são equivalentes à andoperação em que ambas as condições devem ser verdadeiras.

Exemplo 6: compreensão de dicionário condicional if-else

 original_dict = ('jack': 38, 'michael': 48, 'guido': 57, 'john': 33) new_dict_1 = (k: ('old' if v> 40 else 'young') for (k, v) in original_dict.items()) print(new_dict_1) 

Resultado

 ('jack': 'jovem', 'michael': 'velho', 'guido': 'velho', 'joão': 'jovem') 

Nesse caso, um novo dicionário é criado por meio da compreensão de dicionário.

Os itens com um valor de 40 ou mais têm o valor de 'velho' enquanto outros têm o valor de 'jovem'.

Compreensão de dicionário aninhado

Podemos adicionar compreensões de dicionário às próprias compreensões de dicionário para criar dicionários aninhados. Vejamos um exemplo.

Exemplo 7: Dicionário aninhado com duas compreensões de dicionário

 dictionary = ( k1: (k2: k1 * k2 for k2 in range(1, 6)) for k1 in range(2, 5) ) print(dictionary) 

Resultado

 (2: (1: 2, 2: 4, 3: 6, 4: 8, 5: 10), 3: (1: 3, 2: 6, 3: 9, 4: 12, 5: 15), 4: (1: 4, 2: 8, 3: 12, 4: 16, 5: 20)) 

As you can see, we have constructed a multiplication table in a nested dictionary, for numbers from 2 to 4.

Whenever nested dictionary comprehension is used, Python first starts from the outer loop and then goes to the inner one.

So, the above code would be equivalent to:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = (k2: k1*k2 for k2 in range(1, 6)) print(dictionary) 

It can further be unfolded:

 dictionary = dict() for k1 in range(11, 16): dictionary(k1) = dict() for k2 in range(1, 6): dictionary(k1)(k2) = k1*k2 print(dictionary) 

All these three programs give us the same output.

Advantages of Using Dictionary Comprehension

As we can see, dictionary comprehension shortens the process of dictionary initialization by a lot. It makes the code more pythonic.

Using dictionary comprehension in our code can shorten the lines of code while keeping the logic intact.

Warnings on Using Dictionary Comprehension

Embora as compreensões de dicionário sejam ótimas para escrever códigos elegantes e fáceis de ler, nem sempre são a escolha certa.

Devemos ter cuidado ao usá-los como:

  • Às vezes, eles podem tornar o código mais lento e consumir mais memória.
  • Eles também podem diminuir a legibilidade do código.

Não devemos tentar encaixar uma lógica difícil ou um grande número de compreensão de dicionário dentro deles apenas para tornar o código uma linha única. Nestes casos, é melhor escolher outras alternativas, como loops.

Artigos interessantes...