3

私は優れたPythonistaになり、可能な場合はリスト内包表記を使用しようとしています...

なぜこれが機能しないのですか?

[del my_dict[r] for r in to_remove]

to_remove目標は、リスト内のエントリをdictオブジェクトから削除することmy_dict です。

for r in to_remove:
  del my_dict[r]

正常に動作しますが、リスト内包表記でそれを実行しようとしています

4

5 に答える 5

15

副作用のためにリスト内包表記を使用するべきではありません。それはpythonicではありません。

代わりに、単純なforループを使用する必要があります。

于 2012-08-08T10:02:12.763 に答える
11

なぜならdel X、そのように使用されることを意図していないステートメントだからです。構文的に正しくありません。

ただ:

for r in to_remove:
    del my_dict[r]
于 2012-08-08T10:02:43.160 に答える
4
  1. 新しいリストを求めているわけではないので、ここではリスト内包表記から何も得られません。
  2. delは関数ではないため、リスト内包表記の一部として呼び出すことはできません。

基本的には、代わりにリストを繰り返し処理します。

for r in to_remove:
    del my_dict[r]
于 2012-08-08T10:09:38.197 に答える
0

あなたはこれを行うことができますが、私はジャミラックを聞きます。そしてもちろん、これは新しいリストを返しますが、から削除するのではありませんmy_dict

my_dict = [x for x in my_dict if x not in to_remove]
于 2012-08-08T10:05:03.573 に答える
0

あなたはすることができます:

[my_dict.pop(r) for r in to_remove]

.popdel削除されたキーの値を返します。これは(ここを参照)よりも少し遅くなり、これを行うための最も「pythonic」な方法ではありません。したがって、他の人がアドバイスしているように、おそらくそうすべきではありません。

于 2020-07-17T20:10:07.787 に答える