Lors de l’initialisation d’un dictionnaire avec d = {}
, L’inspecteur de code de Pycharm génère un avertissement indiquant que
Cette création de dictionnaire pourrait être réécrite comme un dictionnaire littéral.
Si je le réécris d = dict()
, l'avertissement disparaît. Puisque {}
Déjà est un dictionnaire littéral, je suis presque sûr que le message est erroné. De plus, il semble que d = {}
Et d = dict()
soient valides et Pythonic.
Cette question connexe semble conclure que le choix est simplement une question de style/préférence: différences entre "d = dict ()" et "d = {}"
Pourquoi Pycharm se plaindrait-il de d = {}
?
UPDATE:
Mac l'a cloué. L’avertissement s’applique réellement à plusieurs lignes, pas seulement à celle qui a été marquée.
Pycharm semble rechercher une séquence d'instructions consécutives dans lesquelles 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 va pas:
d = {}
pass
d['a'] = 1
Quel est le code suivant dans votre déclaration de dictionnaire?
Je pense que pycharm déclenchera l'erreur si vous avez quelque chose comme:
dic = {}
dic['aaa'] = 5
comme vous auriez pu l'écrire
dic = {'aaa': 5}
BTW: Le fait que l'erreur disparaisse si vous utilisez la fonction ne signifie pas nécessairement que pycharm croit que dict()
est littéral. Cela pourrait simplement signifier qu'il ne se plaint pas pour:
dic = dict()
dic['aaa'] = 5
HTH!
Cela peut être désactivé dans les paramètres du projet ou les paramètres par défaut.
pour ceux qui aiment (comme moi) initialiser des dictionnaires en une seule opération
d = {
'a': 12,
'b': 'foo',
'c': 'bar'
}
au lieu de nombreuses lignes comme
d = dict()
d['a'] = 12
d['b'] = ....
à la fin j'ai fini avec ceci:
d = dict()
d.update({
'a': 12,
'b': 'foo',
'c': 'bar'
})
Pycharm ne se plaint pas à ce sujet
mydict = {
a: 5,
b:z+c/2
}
Le dictionnaire aurait pu être créé directement sans les initialiser, puis pour réaffecter de nouvelles valeurs.
Je me trouve dans une situation où cet avertissement me dérange. Dans mon cas, je remplis mon dict partiellement comme littéral et partiellement à partir d'une sortie Tuple par une fonction, comme ceci:
def get_other_values():
return 3, 4
foo = {
"a": 1,
"b": 2
}
foo["c"], foo["d"] = get_other_values()
Ainsi, à moins que je ne crée des vars 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 assigner les touches c et d dans le littéral, car les valeurs sont sorties sous forme de tuple.