使用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
您的字典声明的以下代码是什么?
我认为如果你有类似的东西,pycharm会触发错误:
dic = {}
dic['aaa'] = 5
你可以写的
dic = {'aaa': 5}
顺便说一句:如果你使用这个函数错误消失的事实并不一定意味着pycharm相信dict()
是一个文字。这可能只是意味着它没有抱怨:
dic = dict()
dic['aaa'] = 5
HTH!
可以在“项目设置”或“默认设置”中禁用此功能。
对于那些喜欢(就像我一样)用单一操作初始化词典的人
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并没有抱怨这个
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会生成此警告,即使我正在使用文字创建dict。而且我无法在文字中分配c和d键,因为值是作为元组输出的。