Je fais des efforts pour apprendre Python et je porte une attention particulière aux normes de codage courantes. Cela peut sembler être une question inutile, mais j'essaie de me concentrer sur les meilleures pratiques au fur et à mesure que j'apprends, donc je n'ai pas à désapprendre de «mauvaises» habitudes.
Je vois deux méthodes courantes pour initialiser un dict:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Lequel est considéré comme "plus pythonique"? Lequel utilisez-vous? Pourquoi?
python
dictionary
daotoad
la source
la source
{}
assez uniformément, mais je vois beaucoup de l'dict()
approche explicite ailleurs. Je pouvais voir l'avantage d'une syntaxe explicite, mais l'absence de l'approche dans les documents officiels m'a rendu suspect. Après avoir posté cela, j'ai regardé les documents de la bibliothèquedict
et j'ai trouvé la prudence que les clés doivent être des identifiants valides lorsqu'un explicitedict
est utilisé pour initialiser un dict.dict()
est orthographiédict
utilisations --Il le nom du type. Les accolades ({}
) s'appuient sur la ponctuation pour identifier le type.Réponses:
Accolades. Passer des arguments de mots clés dans
dict()
, même si cela fonctionne à merveille dans de nombreux scénarios, ne peut initialiser une carte que si les clés sont des identifiants Python valides.Cela marche:
Cela ne fonctionnera pas:
la source
Les premières accolades bouclées. Sinon, vous rencontrez des problèmes de cohérence avec des clés contenant des caractères impairs, comme
=
.la source
La première version est préférable:
{1: 'one', 2: 'two'}
. La deuxième variante ne fonctionne que pour (certaines) clés de chaîne. L'utilisation de différents types de syntaxe en fonction du type de clés serait une incohérence inutile.C'est plus rapide:
la source
Je pense que la première option est meilleure parce que vous allez accéder aux valeurs en tant que ['a'] ou ['autre']. Les clés de votre dictionnaire sont des chaînes et il n'y a aucune raison de prétendre qu'elles ne le sont pas. Pour moi, la syntaxe des mots clés semble intelligente au premier abord, mais obscure au second regard. Cela n'a de sens pour moi que si vous travaillez avec
__dict__
, et les mots clés vont devenir des attributs plus tard, quelque chose comme ça.la source
Pour info, au cas où vous auriez besoin d'ajouter des attributs à votre dictionnaire (des choses qui sont attachées au dictionnaire, mais qui ne sont pas une des clés), alors vous aurez besoin du deuxième formulaire. Dans ce cas, vous pouvez initialiser votre dictionnaire avec des clés ayant des caractères arbitraires, une à la fois, comme ceci:
la source
C'est parfois
dict()
un bon choix:[random.randint (0,100) pour x dans la plage (0,7)]))
la source
J'utilise presque toujours des accolades; cependant, dans certains cas où j'écris des tests, je fais l'empaquetage / déballage des mots clés, et dans ces cas, dict () est beaucoup plus facile à gérer, car je n'ai pas besoin de changer:
à:
Cela aide également dans certaines circonstances où je pense que je pourrais vouloir le transformer en un tuple nommé ou une instance de classe ultérieurement.
Dans l'implémentation elle-même, en raison de mon obsession pour l'optimisation, et quand je ne vois pas un avantage de maintenance particulièrement énorme, je privilégierai toujours les accolades.
Dans les tests et l'implémentation, je n'utiliserais jamais dict () s'il y a une chance que les clés ajoutées alors, ou à l'avenir, soit:
dict(1foo=2)
déclenche une SyntaxError)la source