211

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

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

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

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

为什么 Pycharm 会抱怨d = {}

更新:

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

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

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

但是这段代码不会:

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

5 回答 5

262

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

我认为如果您有以下情况,PyCharm 会触发错误:

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

正如你可以写的

dic = {'aaa': 5}

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

dic = dict()
dic['aaa'] = 5
于 2011-12-06T20:29:00.833 回答
22

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

  • 导航到设置 -> 检查 -> Python
  • 取消选中“字典创建可以由字典文字重写”
于 2018-01-21T06:25:15.177 回答
11

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

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 并没有对此抱怨

于 2017-07-13T10:42:37.577 回答
0
mydict = {
  a: 5,
  b:z+c/2
}

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

于 2018-08-10T04:52:11.677 回答
0

我有一种情况,这个警告让我心烦意乱。就我而言,我将我的 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 键,因为这些值作为元组输出。

于 2019-04-17T20:03:06.850 回答