为什么Pycharm的检查员抱怨“d = {}”?

时间:2011-12-06 20:16:50

标签: python pycharm

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

  

此字典创建可以重写为字典文字。

如果我重写d = dict(),警告就会消失。由于{}已经 是一个字典文字,我很确定该消息是错误的。此外,似乎d = {}d = dict()都是有效的和Pythonic。

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

为什么Pycharm会抱怨d = {}

更新:

Mac钉了它。警告实际上应用于多行,而不仅仅是被标记的行。

Pycharm似乎在查找一系列连续语句,您可以在其中初始化字典,然后在字典中设置值。例如,这将触发警告:

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

但是这段代码不会:

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

5 个答案:

答案 0 :(得分:222)

字典声明的以下代码是什么?

我认为如果你有类似的话,pycharm会触发错误:

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

你可以写的

dic = {'aaa': 5}

顺便说一句:如果使用该函数,错误消失的事实并不一定意味着pycharm认为dict()是文字。这可能只是意味着它没有抱怨:

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

HTH!

答案 1 :(得分:10)

可以在“项目设置”或“默认设置”中禁用此功能。

  • 导航至设置 - >检查 - >蟒
  • 取消选中“字典创建可以由字典文字重写”

答案 2 :(得分:7)

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

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并没有抱怨这个

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

我遇到这样的情况,该警告使我烦恼不已。就我而言,我的字典部分填充为文字,部分填充为函数输出的元组,如下所示:

def get_other_values():
    return 3, 4

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

因此,除非我为get_other_values的输出创建临时var,否则即使我使用文字创建dict,PEP8也会生成此警告。而且我无法在文字中分配c和d键,因为这些值以元组形式输出。