Lors de l'initialisation d'un dictionnaire avec d = {}
l'inspecteur de code de Pycharm génère un avertissement, disant
Cette création de dictionnaire pourrait être réécrite en tant que littéral de dictionnaire.
Si je le réécris, d = dict()
l'avertissement disparaît. Puisqu'il s'agit{}
déjà d' un dictionnaire littéral, je suis presque sûr que le message est erroné. En outre, il semble être à la fois et sont valides et Pythonic.d = {}
d = dict()
Cette question connexe semble conclure que le choix n'est qu'une question de style / préférence: différences entre "d = dict ()" et "d = {}"
Pourquoi Pycharm se plaindrait d = {}
?
METTRE À JOUR:
Mac l'a cloué. L'avertissement s'appliquait en fait à plusieurs lignes, pas seulement à celle qui était signalée.
Pycharm semble rechercher une séquence d'instructions consécutives où vous initialisez un dictionnaire puis définissez des valeurs dans le dictionnaire. Par exemple, cela déclenchera l'avertissement:
d = {}
d['a'] = 1
Mais ce code ne:
d = {}
pass
d['a'] = 1
something
attribut directement dans le littéral dict au lieu de l'assigner. à la ligne suivante.Réponses:
Quel est le code suivant de votre déclaration de dictionnaire?
Je pense que pycharm déclenchera l'erreur si vous avez quelque chose comme:
comme tu aurais pu écrire
BTW: Le fait que l'erreur disparaisse si vous utilisez la fonction ne signifie pas nécessairement que pycharm pense que
dict()
c'est un littéral. Cela pourrait simplement signifier qu'il ne se plaint pas de:HTH!
la source
dic = dict()
solution de contournement ...d = { 'aaa': f1(something) }
là,d = f2(d)
puisd = f3(d)
etc ... Ou biend['bbb'] = f2(d)
,d['ccc'] = f3(d)
...?d = {}
,d['a'] = A
,d['b'] = f(d['a'])
,d['c'] = f(d['b'])
, etc.d = {'a': A}
et ensuite simplement conserver la séquence comme vous l'avez indiqué?Cela peut être désactivé dans les paramètres du projet ou les paramètres par défaut.
la source
pour ceux qui aiment (comme moi) initialiser des dictionnaires avec une seule opération
au lieu de nombreuses lignes comme
à la fin, je me suis retrouvé avec ceci:
Pycharm ne se plaint pas de cela
la source
Le dictionnaire aurait pu être créé directement sans les initialiser d'abord, puis réaffecter de nouvelles valeurs.
la source
J'ai une situation où cet avertissement me dérange. Dans mon cas, je remplis mon dict partiellement en littéraux et partiellement à partir d'une sortie de tuple par une fonction, comme ceci:
Donc, à moins que je ne crée des variables intermédiaires pour la sortie de get_other_values, PEP8 génère cet avertissement même si je crée le dict avec des littéraux. Et je ne peux pas affecter les touches c et d dans le littéral, car les valeurs sont sorties comme un tuple.
la source