d = {}
Pycharmのコードインスペクターで辞書を初期化すると、次のような警告が生成されます。
この辞書作成は、辞書リテラルとして書き直すことができます。
d = dict()
に書き換えると、警告は消えます。 {}
はすでにが辞書リテラルなので、メッセージが間違っていると確信しています。さらに、d = {}
とd = dict()
の両方が有効でPythonicのようです。
この関連する質問は、選択は単にスタイル/好みの問題であると結論付けているようです: 「d = dict()」と「d = {}」の違い
Pycharmがd = {}
について文句を言うのはなぜですか?
UPDATE:
マックはそれを打ちました。警告は、フラグが立てられたものだけでなく、実際には複数の行に適用されました。
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
}
辞書は、最初に初期化してから新しい値を再割り当てすることなく、直接作成できます。
私は、この警告が私を地獄に追いやっている状況にあります。私の場合、次のように、一部はリテラルとして、一部は関数によるタプル出力から辞書を作成しています。
def get_other_values():
return 3, 4
foo = {
"a": 1,
"b": 2
}
foo["c"], foo["d"] = get_other_values()
そのため、get_other_valuesの出力用に暫定変数を作成しない限り、リテラルでdictを作成している場合でも、PEP8はこの警告を生成します。また、値がタプルとして出力されるため、リテラルにcキーとdキーを割り当てることはできません。