当使用d ={}初始化字典时,Pycharm的代码检查器会生成一个警告,即

这个字典创建可以重写为字典字面量。

如果我重写d = dict()警告就消失了。因为{}已经是一个字典字面量,我很确定这个消息是错误的。此外,d ={}和d = dict()似乎都是有效的并且是Pythonic的。

这个相关的问题似乎得出的结论是,选择只是风格/偏好的问题: d = dict()与d ={}的区别

为什么Pycharm会抱怨d = {}?

更新:

麦克做到了。该警告实际上适用于多行,而不仅仅是被标记的那行。

Pycharm似乎在寻找一个连续的语句序列,在其中初始化一个字典,然后在字典中设置值。例如,这将触发警告:

d = {}
d['a'] = 1

但这段代码不会:

d = {}
pass
d['a'] = 1

当前回答

mydict = {
  a: 5,
  b:z+c/2
}

字典可以直接创建,而不需要先初始化它们,然后重新分配新值。

其他回答

字典声明后面的代码是什么?

我认为PyCharm会触发错误,如果你有这样的东西:

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

就像你写的那样

dic = {'aaa': 5}

注意:如果使用函数dict(),错误就会消失。这并不一定意味着pycharm认为dict()是字面量。它可能只是意味着它不会抱怨:

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

对于那些喜欢(就像我一样)用单个操作初始化字典的人

d = {
  'a': 12,
  'b': 'foo',
  'c': 'bar'
}

而不是许多行喜欢

d = dict()
d['a'] = 12
d['b'] = ....

最后我得出了这个结论:

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

Pycharm对此并没有抱怨

这可以在项目设置或默认设置中禁用。

进入“设置”-“>检查”-“> Python” 取消选中“字典的创建可以被字典文字重写”

mydict = {
  a: 5,
  b:z+c/2
}

字典可以直接创建,而不需要先初始化它们,然后重新分配新值。

我现在的情况就是这个警告让我心烦意乱。在我的例子中,我将dict部分填充为字面量,部分填充为函数输出的元组,如下所示:

def get_other_values():
    return 3, 4

foo = {
    "a": 1,
    "b": 2
}
foo["c"], foo["d"] = get_other_values()

因此,除非我为get_other_values的输出创建临时变量,否则即使我用字面量创建字典,PEP8也会生成此警告。我不能在文字中分配c和d键,因为这些值是作为元组输出的。