Inicializando dicionário com valores padrões (Python)

Você tem uma lista com as chaves e quer criar um dicionário que já venha populado com um valor padrão? Existem diversas formas de resolver esta questão, mas vou mostrar como fazer isso utilizando uma funcionalidade nativa do próprio dicionário.

Para contexto, vamos imaginar que você possui as seguintes chaves: “foo”, “bar” e “bacon”. Seu objeto é criar um dicionário que já possua o valor -1 para cada uma destas chaves. O modo mais ‘manual’ de se fazer isso seria assim:

Ok, isso resolve o problema… mas você precisaria editar este código sempre que ocorrer alguma mudança nas chaves.

 

A evolução do código acima seria utilizar um for para fazer esta atribuição:

Melhorou um pouco, mas pode ficar melhor. O próprio dicionário possui uma função que faz esta iteração para você. Veja como fica o código, quando utilizamos esta função:

 

Agora ficou bem melhor e menor (menos linhas digitadas). Uma das vantagens deste método é que você pode utiliza-lo diversas vezes no mesmo dicionário, quando quiser que determinadas chaves possuam valores padrões diferentes. Exemplo:

O dicionário criado acima possuirá o valor -1 para as chaves foo, bar e bacon e o valor 0  para as chaves abc, def, ghi.

 

Uma última coisa que podemos fazer para deixar este exemplo ainda mais prático seria encapsular isso em uma função:

Na função acima, estou mesclando dois dicionários, o que foi fornecido e o que foi gerado com as chaves que o usuário passou. Se nenhum dicionário for fornecido, o retorno será um novo dicionário com os valores inicializados. Só um alerta: acredito que esta função não vai funcionar no Python versão 3.4 ou inferior.

O código desta função está no meu github.

 

Espero ter ajudado.

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, Python and tagged , , .