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. Étant donné que {} est déjà 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 n'est qu'une question de style / préférence: différences entre "d = dict ()" et "d = {}"

Pourquoi Pycharm se plaindrait de d = {}?

MISE À 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
201
Chris Sears 7 déc. 2011 à 00:16

5 réponses

Meilleure réponse

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:

dic = {}
dic['aaa'] = 5

Comme tu aurais pu écrire

dic = {'aaa': 5}

BTW: Le fait que l'erreur disparaisse si vous utilisez la fonction ne signifie pas nécessairement que pycharm pense que dict() est un littéral. Cela pourrait simplement signifier qu'il ne se plaint pas de:

dic = dict()
dic['aaa'] = 5

HTH!

238
codeape 6 déc. 2011 à 20:47

Cela peut être désactivé dans les paramètres du projet ou les paramètres par défaut.

  • Accédez à Paramètres -> Inspections -> Python
  • Décochez "La création du dictionnaire pourrait être réécrite par le littéral du dictionnaire"
12
Craig Jackson 21 janv. 2018 à 06:25

J'ai une situation où cet avertissement me dérange. Dans mon cas, je remplis mon dict partiellement sous forme de littéraux et partiellement à partir d'une sortie de 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()

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 assigner les touches c et d dans le littéral, puisque les valeurs sont sorties comme un tuple.

0
Chris Woodfield 17 avril 2019 à 20:03

Pour ceux qui aiment (comme moi) initialiser des dictionnaires avec 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, je me suis retrouvé avec ceci:

d = dict()
d.update({
  'a': 12,
  'b': 'foo',
  'c': 'bar'
})

Pycharm ne se plaint pas de cela

9
Igor.K 13 juil. 2017 à 10:42
mydict = {
  a: 5,
  b:z+c/2
}

Le dictionnaire aurait pu être créé directement sans les initialiser d'abord, puis réaffecter de nouvelles valeurs.

1
CertainPerformance 10 août 2018 à 05:12