Création d'un nouveau dictionnaire en Python

454

Je veux construire un dictionnaire en Python. Cependant, tous les exemples que je vois instancient un dictionnaire à partir d'une liste, etc. ..

Comment créer un nouveau dictionnaire vide en Python?

leora
la source

Réponses:

661

Appel dictsans paramètres

new_dict = dict()

ou écrivez simplement

new_dict = {}
Jan Vorcak
la source
39
Y a-t-il une différence entre dict () et {}? Ou les gens préfèrent-ils simplement l'un plutôt que l'autre?
Matt
52
@ Matt Apparemment, CPython 2.7 dict () est plus lent (6 fois plus lent?), Voir: doughellmann.com/2012/11/… En tout cas, je commence de toute façon à préférer la syntaxe du constructeur car je trouve plus facile de taper et de déplacer du code entre les dict et les appels de fonction.
David Wheaton
16
Je confirme qu'il est 3 fois plus rapide d'utiliser {} que dict () en python 3.x
Alex Azazel
8
Oui, je suis environ 4 fois plus rapide en python 3.6 pour {}plus dict()et 5 fois pour []plus list().
Michael Hall
10
Dans la grande majorité des cas, cela n'a pas d'importance si cela prend six fois plus de temps, car cela reste un temps incroyablement petit.
hypehuman
247

Tu peux le faire

x = {}
x['a'] = 1
TJD
la source
107
+1 pour la prochaine question logique sur la façon d'y ajouter un nouvel élément
Matt Klein
27

Il est également utile de savoir comment écrire un dictionnaire prédéfini:

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
fyngyrz
la source
4
Bon point! Mais je pense que le peu avec cxlaterend votre réponse trop compliquée. Je garderais juste la partie initialisation. ( cxlatelui-même est trop compliqué. Vous pourriez juste return cmap.get(country, '?').)
Daniel Darabos
Envisagez d'utiliser docs.python.org/2/library/… au lieu d'écrire une fonction de traduction ou d'utiliser .get () partout.
Sparr
1
Peut-être que je le ferais, sauf que la documentation est absolument opaque pour moi - c'est terrible. Je n'ai aucune idée de ce qu'ils me disent de faire, ni pourquoi je devrais le faire. Et .get () semble faire exactement la bonne chose - en plus, il est extrêmement flexible. Je suis sûr que c'est un manque de compréhension de ma part. Dans cet esprit, mes questions sont: pourquoi s'embêter? Qu'est-ce qui est enregistré ici, plus facile ici, plus rapide ici, etc.? L'avantage est exactement quoi?
fyngyrz
1
Sans rapport, mais vous devez explicitement attraper le KeyErrorau lieu d'un bare except (ce qui attraperait des choses telles que KeyboardInterruptet SystemExit).
Arnav Borborah
Arnav, oui, bien sûr, vous avez raison. Modifié en conséquence. Je vous remercie!
fyngyrz
19
>>> dict(a=2,b=4)
{'a': 2, 'b': 4}

Ajoutera la valeur dans le dictionnaire python.

Atul Arvind
la source
15
d = dict()

ou

d = {}

ou

import types
d = types.DictType.__new__(types.DictType, (), {})
ukessi
la source
Quelle est la différence entre types.DictType.__new__(types.DictType, (), {})et juste{}
2
Pour tous ceux qui lisent ceci: la dernière "solution" est un peu une blague - vous pouvez l' utiliser (en python 2.x au moins - ne fonctionnera pas dans py3k), mais personne dans son esprit ne voudra jamais faire donc ;-)
bruno desthuilliers
6

Il y a donc 2 façons de créer un dict:

  1. my_dict = dict()

  2. my_dict = {}

Mais sur ces deux options {}est plus efficace que dict()plus lisible. VÉRIFIER ICI

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


{'a': [1, 2, 3], 'b': [1, 2, 3], 'c': [1, 2, 3]}
sudhir tataraju
la source
la question indique que le dictionnaire devrait être une nouvelle instance vide
Wesam