Criando um novo dicionário em Python


454

Eu quero construir um dicionário em Python. No entanto, todos os exemplos que vejo instanciam um dicionário a partir de uma lista, etc. ..

Como crio um novo dicionário vazio no Python?

Respostas:


661

Chamada dictsem parâmetros

new_dict = dict()

ou simplesmente escreva

new_dict = {}

39
Existe alguma diferença entre dict () e {}? Ou as pessoas simplesmente preferem uma sobre a outra?
Matt

52
@ Matt Aparentemente, o CPython 2.7 dict () é mais lento (6 vezes mais lento?), Veja: doughellmann.com/2012/11/… De qualquer forma, estou começando a preferir a sintaxe do construtor de qualquer maneira, pois acho mais fácil digitar e mover o código entre ditados e chamadas de função.
David Wheaton

16
Confirmo que é 3 vezes mais rápido usar {} de dict () em 3.x python
Alex Azazel

8
Sim, eu fico cerca de 4 vezes mais rápido no python 3.6 por {}mais dict()e 5 vezes por []mais list().
Michael Hall

10
Na grande maioria dos casos, não importa se leva seis vezes mais, pois ainda é uma quantidade de tempo imperceptivelmente pequena.
Hypehuman

247

Você consegue fazer isso

x = {}
x['a'] = 1

107
+1 para a próxima questão lógica de como adicionar um novo elemento a ela
Matt Klein

27

Também é útil saber como escrever um dicionário predefinido:

cmap =  {'US':'USA','GB':'Great Britain'}

# Explicitly:
# -----------
def cxlate(country):
    try:
        ret = cmap[country]
    except KeyError:
        ret = '?'
    return ret

present = 'US' # this one is in the dict
missing = 'RU' # this one is not

print cxlate(present) # == USA
print cxlate(missing) # == ?

# or, much more simply as suggested below:

print cmap.get(present,'?') # == USA
print cmap.get(missing,'?') # == ?

# with country codes, you might prefer to return the original on failure:

print cmap.get(present,present) # == USA
print cmap.get(missing,missing) # == RU

4
Bom ponto! Mas acho que o pouco cxlatefaz sua resposta parecer complicada demais. Eu apenas manteria a parte de inicialização. ( cxlateEm si é muito complicado Você poderia simplesmente. return cmap.get(country, '?').)
Daniel Darabos

Considere usar docs.python.org/2/library/… em vez de escrever uma função de conversão ou usar .get () em qualquer lugar.
Sparr

1
Talvez sim, exceto que a documentação é absolutamente opaca para mim - é terrível. Não faço ideia do que eles estão me dizendo para fazer ou por que devo fazê-lo. E .get () parece fazer exatamente a coisa certa - além de ser extremamente flexível. Tenho certeza que é uma falta de entendimento da minha parte. Com isso em mente, minhas perguntas são: por que se preocupar? O que é salvo aqui, mais fácil aqui, mais rápido aqui, etc.? Benefício é exatamente o que?
Fyngyrz

1
Não relacionado, mas você deve pegar explicitamente o KeyErrorinvés de um bare, exceto (o que capturaria coisas como KeyboardInterrupte SystemExit).
Arnav Borborah 10/03/19

Arnav, sim, claro que você está certo. Editado de acordo. Obrigado!
Fyngyrz

19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Adicionará o valor no dicionário python.


15
d = dict()

ou

d = {}

ou

import types
d = types.DictType.__new__(types.DictType, (), {})

Qual é a diferença entre types.DictType.__new__(types.DictType, (), {})e just{}

2
Para quem lê isso: a última "solução" é uma piada - você pode usá-la (pelo menos no python 2.x - não funciona no py3k), mas ninguém em sua mente gostaria de fazer isso so ;-)
bruno desthuilliers

6

Portanto, existem 2 maneiras de criar um ditado:

  1. my_dict = dict()

  2. my_dict = {}

Mas dessas duas opções {}é mais eficiente do que dict()a legível. VERIFIQUE AQUI


4
>>> dict.fromkeys(['a','b','c'],[1,2,3])


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}

a pergunta afirma que o dicionário deve ser uma nova instância vazia #
Wesam
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.