Al inicializar un diccionario con d = {}
el inspector de código de Pycharm, se genera una advertencia que dice:
La creación de este diccionario podría reescribirse como literal del diccionario.
Si lo reescribo, d = dict()
la advertencia desaparece. Como {}
ya es un diccionario literal, estoy bastante seguro de que el mensaje es erróneo. Además, parece ambos d = {}
y d = dict()
son válidos y pitónicos.
Esta pregunta relacionada parece concluir que la elección es solo una cuestión de estilo / preferencia: diferencias entre "d = dict ()" y "d = {}"
¿Por qué se quejaría Pycharm d = {}
?
ACTUALIZAR:
Mac lo clavó. La advertencia en realidad se aplica a varias líneas, no solo a la marcada.
Pycharm parece buscar una secuencia de declaraciones consecutivas donde inicializa un diccionario y luego establece valores en el diccionario. Por ejemplo, esto activará la advertencia:
d = {}
d['a'] = 1
Pero este código no:
d = {}
pass
d['a'] = 1
something
atributo directamente en el literal dict en lugar de asignarlo en la proxima linea.Respuestas:
¿Cuál es el siguiente código para la declaración de tu diccionario?
Creo que pycharm activará el error si tienes algo como:
como podrías haber escrito
Por cierto: el hecho de que el error desaparezca si usas la función no necesariamente significa que pycharm cree que
dict()
es un literal. Simplemente podría significar que no se queja por:HTH!
fuente
dic = dict()
solución ...d = { 'aaa': f1(something) }
eso,d = f2(d)
entonces,d = f3(d)
etc ... Od['bbb'] = f2(d)
, alternativamente ,d['ccc'] = f3(d)
...?d = {}
,d['a'] = A
,d['b'] = f(d['a'])
,d['c'] = f(d['b'])
, etcd = {'a': A}
y luego simplemente mantener la secuencia como se describe?Esto se puede deshabilitar en la Configuración del proyecto o la Configuración predeterminada.
fuente
para aquellos a quienes les gusta (como yo) inicializar diccionarios con una sola operación
en lugar de muchas líneas como
Al final terminé con esto:
Pycharm no se queja de esto
fuente
El diccionario podría haberse creado directamente sin inicializarlos primero y luego reasignar nuevos valores.
fuente
Tengo una situación en la que esta advertencia me está molestando muchísimo. En mi caso, estoy completando mi dict parcialmente como literales y parcialmente desde una salida de tupla por una función, así:
Entonces, a menos que cree vars provisionales para la salida de get_other_values, PEP8 genera esta advertencia a pesar de que estoy creando el dict con literales. Y no puedo asignar las teclas cyd en el literal, ya que los valores se muestran como una tupla.
fuente