dictionary - Como inicializar um dict com chaves de uma lista e valor vazio em Python?



(6)

Eu gostaria de sair disto:

keys = [1,2,3]

para isso:

{1: None, 2: None, 3: None}

Existe uma maneira pythonic 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}

Answers

d = {}
for i in keys:
    d[i] = None

Em muitos fluxos de trabalho em que você deseja anexar um valor padrão / inicial para chaves arbitrárias, não é necessário codificar cada chave individualmente antes do tempo. Você pode usar collections.defaultdict . Por exemplo:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

Isso é mais eficiente, ele economiza o hash hash todas as suas chaves na instanciação. Além disso, defaultdict é uma subclasse de dict , então geralmente não há necessidade de converter de volta para um dicionário comum.

Para fluxos de trabalho nos quais você exige o controle de chaves permitidas, é possível usar dict.fromkeys acordo com a resposta aceita:

d = dict.fromkeys([1, 2, 3, 4])

>>> keyDict = {"a","b","c","d"}

>>> dict([(key, []) for key in keyDict])

Saída:

{'a': [], 'c': [], 'b': [], 'd': []}

ninguém se importou em dar uma solução de compreensão de ditadores?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}

dict.fromkeys(keys, None)

O método index() Python gera um erro se o item não foi encontrado, o que é uma droga!

Então, em vez disso, você pode torná-lo semelhante à função indexOf() do JavaScript, que retorna -1 se o item não foi encontrado:

    try:
        index = array.index('search_keyword')
    except ValueError:
        index = -1




dictionary python