Estou fazendo algum esforço para aprender Python e prestando muita atenção aos padrões comuns de codificação. Isso pode parecer uma pergunta inútil, mas estou tentando me concentrar nas melhores práticas à medida que aprendo, para não precisar desaprender nenhum hábito "ruim".
Eu vejo dois métodos comuns para inicializar um ditado:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Qual é considerado "mais pitônico"? Qual você usa? Por quê?
python
dictionary
daotoad
fonte
fonte
{}
bastante uniforme, mas vejo muitasdict()
abordagens explícitas em outros lugares. Pude ver o benefício de uma sintaxe explícita, mas a ausência da abordagem nos documentos oficiais me deixou desconfiada. Depois de postar isso, examinei os documentos da bibliotecadict
e constatei o cuidado de que as chaves devem ser identificadores válidos quando um explícitodict
é usado para inicializar um ditado.dict()
está escritodict
- ele usa o nome do tipo. As chaves ({}
) dependem de pontuação para identificar o tipo.Respostas:
Aparelhos encaracolados. Passando argumentos de palavra-chave para
dict()
, embora funcione perfeitamente em muitos cenários, só pode inicializar um mapa se as chaves forem identificadores Python válidos.Isso funciona:
Isso não vai funcionar:
fonte
O primeiro aparelho, encaracolado. Caso contrário, você terá problemas de consistência com chaves com caracteres estranhos, como
=
.fonte
A primeira versão é preferível:
{1: 'one', 2: 'two'}
. A segunda variante funciona apenas para (algumas) chaves de sequência. Usar diferentes tipos de sintaxe, dependendo do tipo das chaves, seria uma inconsistência desnecessária.É mais rápido:
fonte
Eu acho que a primeira opção é melhor porque você acessará os valores como um ['a'] ou um ['another']. As chaves do seu dicionário são cadeias de caracteres e não há razão para fingir que não são. Para mim, a sintaxe da palavra-chave parece inteligente a princípio, mas obscura em uma segunda olhada. Isso só faz sentido para mim se você estiver trabalhando
__dict__
e as palavras-chave se tornarem atributos mais tarde, algo assim.fonte
Para sua informação, caso você precise adicionar atributos ao seu dicionário (itens anexados ao dicionário, mas que não são uma das chaves), será necessário o segundo formulário. Nesse caso, você pode inicializar seu dicionário com chaves com caracteres arbitrários, um de cada vez, da seguinte forma:
fonte
Às vezes
dict()
é uma boa escolha:[random.randint (0,100) para x no intervalo (0,7)]))
fonte
Eu quase sempre uso suspensórios; no entanto, em alguns casos em que estou escrevendo testes, faço a compactação / descompactação de palavras-chave e, nesses casos, dict () é muito mais sustentável, pois não preciso alterar:
para:
Também ajuda em algumas circunstâncias em que acho que posso transformá-lo em uma instância nomeada de casal ou classe posteriormente.
Na implementação em si, devido à minha obsessão com a otimização, e quando não vejo um benefício particularmente grande de manutenção, sempre farei favor de chaves.
Nos testes e na implementação, eu nunca usaria dict () se houver uma chance de que as chaves adicionadas então, ou no futuro, sejam:
dict(1foo=2)
gera um SyntaxError)fonte