Extrait du tutoriel python 2.7 :
Une paire d'accolades crée un vide : {}. En plaçant une liste de paires clé:valeur séparées par des virgules séparée par des virgules à l'intérieur des accolades ajoute les paires paires clé:valeur initiales au dictionnaire ; c'est également de cette manière que les dictionnaires sont écrits sur la sortie.
tel = {'jack': 4098, 'sape': 4139}
data = {k:v for k,v in zip(xrange(10), xrange(10,20))}
Alors que :
Le constructeur dict() construit des directement à partir de listes de paires clé-valeur stockées sous forme de tuples. Lorsque les paires forment un motif, la liste peuvent spécifier de manière compacte la liste de valeurs-clés.
tel = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)]) {'sape': 4139, 'jack': 4098, 'guido': 4127}
data = dict((k,v) for k,v in zip(xrange(10), xrange(10,20)))
Lorsque les clés sont de simples chaînes de caractères, il est parfois plus facile de spécifier des paires en utilisant des arguments de type mot-clé :
dict(sape=4139, guido=4127, jack=4098)
>>> {'sape': 4139, 'jack':4098, 'guido': 4127}
Ainsi, {} et dict() produisent tous deux des dictionnaires mais fournissent des méthodes légèrement différentes d'initialisation des données de dictionnaire.
9 votes
dict()
prend une liste de paires clé-valeur et autorise les paramètres nommés. Il peut donc être utilisé pour créer n'importe quel type de dict, mais pas avec la syntaxe que vous utilisez. Il est également important de noter qu'il y a eu un bug ( youtrack.jetbrains.net/issue/PY-2512 ) dans pyCharm spécifiquement à cause de ce que vous avez découvert, qui a été corrigé).1 votes
Liés : stackoverflow.com/questions/5790860/ (résumé : le comportement de PyCharm est plus lent et plus moche)
1 votes
Apparemment, CPython 2.7 dict() est plus lent (6 fois plus lent ?). Voir : doughellmann.com/2012/11/ De toute façon, je commence à préférer la syntaxe des constructeurs, car je trouve plus facile de taper et de déplacer le code entre les dicts et les appels de fonction.
3 votes
N'oubliez pas les espaces : vous ne pouvez pas créer de clés contenant des espaces en utilisant la deuxième méthode. La première méthode, par contre, peut prendre n'importe quelle chaîne de caractères, elle s'en moque. La même chose s'applique à Unicode, bien sûr.
2 votes
Dans Python 2, la fonction
dict(abc = 123)
Le constructeur produit un dictionnaire dont les clés sont des chaînes d'octets.'abc'
ce qui peut être surprenant si vous utilisezunicode_literals
et s'attendre à ce que les clés du dictionnaire soient unicodeu'abc'
. Ver stackoverflow.com/questions/20357210/ .0 votes
@CamilB vous pouvez toujours passer **kwargs au constructeur. Ceci, cependant, nécessite encore un autre littéral dict à être instancié au préalable, donc il a des cas d'utilisation limités (mais il peut être utilisé comme une sorte de motif "pseudo-partiel") .