Ao inicializar um dicionário com d = {}
o inspetor de código do Pycharm, gera um aviso, dizendo
Essa criação do dicionário pode ser reescrita como um literal do dicionário.
Se eu reescrevê-lo, d = dict()
o aviso desaparece. Como {}
já é um literal de dicionário, tenho certeza de que a mensagem está incorreta. Além disso, parece que tanto d = {}
e d = dict()
são válidos e Pythonic.
Essa questão relacionada parece concluir que a escolha é apenas uma questão de estilo / preferência: diferenças entre "d = dict ()" e "d = {}"
Por que Pycharm reclamaria d = {}
?
ATUALIZAR:
Mac acertou em cheio. O aviso realmente se aplicou a várias linhas, não apenas à que foi sinalizada.
O Pycharm parece procurar uma sequência de instruções consecutivas onde você inicializa um dicionário e, em seguida, define valores no dicionário. Por exemplo, isso acionará o aviso:
d = {}
d['a'] = 1
Mas este código não irá:
d = {}
pass
d['a'] = 1
something
atributo diretamente no literal do dict em vez de atribuí-lo na próxima linha.Respostas:
Qual é o código a seguir na sua declaração de dicionário?
Acho pycharm irá disparar o erro se você tiver algo como:
como você poderia ter escrito
BTW: O fato de o erro desaparecer se você usar a função não significa necessariamente que o pycharm acredite
dict()
ser literal. Isso pode significar apenas que não se queixa de:HTH!
fonte
dic = dict()
solução alternativa ...d = { 'aaa': f1(something) }
issod = f2(d)
entãod = f3(d)
etc ... Oud['bbb'] = f2(d)
, alternativamente ,d['ccc'] = f3(d)
...?d = {}
,d['a'] = A
,d['b'] = f(d['a'])
,d['c'] = f(d['b'])
, etc.d = {'a': A}
e depois manter a sequência como você descreveu?Isso pode ser desativado nas configurações do projeto ou nas configurações padrão.
fonte
para quem gosta (como eu) de inicializar dicionários com uma única operação
em vez de muitas linhas como
no final, acabei com isso:
Pycharm não está reclamando disso
fonte
O dicionário poderia ter sido criado diretamente, sem inicializá-los primeiro e depois reatribuir novos valores.
fonte
Eu tenho uma situação em que esse aviso está me incomodando demais. No meu caso, estou preenchendo meu ditado parcialmente como literais e parcialmente de uma saída de tupla por uma função, da seguinte forma:
Portanto, a menos que eu crie vars intermediários para a saída de get_other_values, o PEP8 gera esse aviso, mesmo que eu esteja criando o dict com literais. E não posso atribuir as teclas c e d no literal, pois os valores são emitidos como uma tupla.
fonte