使用 d = {}
初始化字典时,Pycharm 的代码检查器会生成警告,说
这个字典创建可以重写为字典文字。
如果我重写它d = dict()
,警告就会消失。由于 {}
已经 is 是字典文字,因此我很确定该消息是错误的。此外,似乎 d = {}
和 d = dict()
都是有效的和 Pythonic。
这个相关问题似乎得出结论,选择只是风格/偏好问题:differences between "d = dict()" and "d = {}"
为什么 Pycharm 会抱怨 d = {}
?
更新:
麦克钉了它。该警告实际上适用于多行,而不仅仅是被标记的那一行。
Pycharm 似乎在寻找一系列连续的语句,您可以在其中初始化字典,然后在字典中设置值。例如,这将触发警告:
d = {}
d['a'] = 1
但是这段代码不会:
d = {}
pass
d['a'] = 1
something
属性的值直接提供到 dict 文字中,而不是在下一行分配它。
您的字典声明的以下代码是什么?
我认为如果您有以下情况,PyCharm 会触发错误:
dic = {}
dic['aaa'] = 5
正如你可以写的
dic = {'aaa': 5}
注意:如果您使用该函数,错误就会消失这一事实并不一定意味着 pycharm 认为 dict()
是文字。这可能只是意味着它不会抱怨:
dic = dict()
dic['aaa'] = 5
这可以在项目设置或默认设置中禁用。
导航到设置 -> 检查 -> Python
取消选中“字典创建可以由字典文字重写”
对于那些喜欢(就像我一样)用单一操作初始化字典的人
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 键,因为这些值作为元组输出。
dic = dict()
解决方法...d = { 'aaa': f1(something) }
然后d = f2(d)
然后d = f3(d)
等...或者d['bbb'] = f2(d)
、{5 } ...?d = {}
、d['a'] = A
、d['b'] = f(d['a'])
、d['c'] = f(d['b'])
等。d = {'a': A}
合并,然后保持您概述的序列?