Eu gostaria de obter isso:
keys = [1,2,3]
para isso:
{1: None, 2: None, 3: None}
Existe uma maneira pitônica de fazer isso?
Esta é uma maneira feia de fazer isso:
>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}
dictionary
python
Juanjo Conti
fonte
fonte
dict.fromkeys([1, 2, 3], [])
todas as chaves são mapeadas para a mesma lista, e a modificação de uma modificará todas elas.{k:[] for k in [1, 2, 3]}
ainda é seguro.ninguém se importava em dar uma solução de compreensão de ditados?
fonte
False
).fonte
dict.fromkeys(keys, [])
Resultado:
fonte
keyDict
é enganoso, pois a primeira linha de código retorna aset
, não adict
.fonte
TypeError: 'type' object is not iterable
:?list
é um tipo. A menos que você tem algo parecidolist = []
, o método acima irá sempre dar-lhe o mesmo erroEm muitos fluxos de trabalho em que você deseja anexar um valor inicial / padrão para chaves arbitrárias, não é necessário fazer o hash de cada chave individualmente antes do tempo. Você pode usar
collections.defaultdict
. Por exemplo:Isso é mais eficiente, pois evita o hash de todas as suas chaves na instanciação. Além disso,
defaultdict
é uma subclasse dedict
, portanto, geralmente não há necessidade de converter novamente em um dicionário comum.Para fluxos de trabalho em que você precisa de controles sobre chaves permitidas, pode usar
dict.fromkeys
conforme a resposta aceita:fonte