2464

辞書からキーを削除するときは、次を使用します。

if 'key' in my_dict:
    del my_dict['key']

これを行う1行の方法はありますか?

4

15 に答える 15

3942

ディクショナリにあるかどうかに関係なくキーを削除するには、次の 2 つの引数形式を使用しますdict.pop()

my_dict.pop('key', None)

辞書に存在するmy_dict[key]場合は返され、そうでない場合は返されます。2 番目のパラメーターが指定されておらず (つまり)、存在しない場合は、 aが発生します。keyNonemy_dict.pop('key')keyKeyError

存在することが保証されているキーを削除するには、次を使用することもできます。

del my_dict['key']

KeyErrorキーがディクショナリにない場合、これは a を発生させます。

于 2012-06-30T20:29:18.237 に答える
414

具体的には、「これを行う1行の方法はありますか?」

if 'key' in my_dict: del my_dict['key']

...まあ、あなたは尋ねました;-)

ただし、 からオブジェクトを削除するこの方法はアトミックdictではないことを考慮する必要があります— がステートメントの実行中にある可能性がありますが、が実行される前に削除される可能性があります。その場合、 で失敗します。これを考えると、または次のようなものを使用するのが最も安全です'key'my_dictifdeldelKeyErrordict.pop

try:
    del my_dict['key']
except KeyError:
    pass

もちろん、これは間違いなくワンライナーではありません。

于 2012-06-30T20:36:44.680 に答える
181

正確に何をしているのかを理解するのに時間がかかりましたmy_dict.pop("key", None)。したがって、他の人のグーグル時間を節約するために、これを回答として追加します。

pop(key[, default])

keyがディクショナリにある場合は、それを削除してその値を返します。そうでない場合はdefaultを返します。defaultが指定されておらず、キーが辞書にない場合は、 aKeyErrorが発生します。

ドキュメンテーション

于 2013-03-04T16:43:20.967 に答える
60

1 行のコードで辞書から多くのキーを削除する必要がある場合、 map() を使用すると非常に簡潔で、Pythonic で読みやすくなると思います。

myDict = {'a':1,'b':2,'c':3,'d':4}
map(myDict.pop, ['a','c']) # The list of keys to remove
>>> myDict
{'b': 2, 'd': 4}

また、辞書にない値をポップするエラーをキャッチする必要がある場合は、次のように map() 内でラムダを使用します。

map(lambda x: myDict.pop(x,None), ['a', 'c', 'e'])
[1, 3, None] # pop returns
>>> myDict
{'b': 2, 'd': 4}

または ではpython3、代わりにリスト内包表記を使用する必要があります。

[myDict.pop(x, None) for x in ['a', 'c', 'e']]

できます。また、myDict には「e」キーがありませんでしたが、「e」はエラーを引き起こしませんでした。

于 2015-09-16T19:17:36.957 に答える
9

次のいくつかの方法で、Python 辞書からキーを削除できます。

delキーワードの使用; それはあなたがしたのとほとんど同じアプローチですが-

 myDict = {'one': 100, 'two': 200, 'three': 300 }
 print(myDict)  # {'one': 100, 'two': 200, 'three': 300}
 if myDict.get('one') : del myDict['one']
 print(myDict)  # {'two': 200, 'three': 300}

または

次のようにできます。

ただし、このプロセスでは、特定のキーをそのディクショナリから除外するのではなく、実際にはディクショナリからキーを削除しないことに注意してください。さらに、 と同じ順序で並べられていない辞書が返されたことに気付きました。myDict

myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500}
{key:value for key, value in myDict.items() if key != 'one'}

シェルで実行すると、次のように実行されます{'five': 500, 'four': 400, 'three': 300, 'two': 200}- と同じ順序ではないことに注意してmyDictください。再び印刷しようとするとmyDict、このアプローチで辞書から除外したものを含むすべてのキーが表示されます。ただし、次のステートメントを変数に代入することで、新しい辞書を作成できます。

var = {key:value for key, value in myDict.items() if key != 'one'}

これを印刷しようとすると、親の順序に従います。

print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}

または

メソッドを使用しpop()ます。

myDict = {'one': 100, 'two': 200, 'three': 300}
print(myDict)

if myDict.get('one') : myDict.pop('one')
print(myDict)  # {'two': 200, 'three': 300}

delとの違いは、次のように、メソッドpopを使用して、必要に応じてキーの値pop()を実際に格納できることです。

myDict = {'one': 100, 'two': 200, 'three': 300}
if myDict.get('one') : var = myDict.pop('one')
print(myDict) # {'two': 200, 'three': 300}
print(var)    # 100

これが役立つと思われる場合は、将来の参照用にこの要点をフォークしてください。

于 2018-05-19T10:09:13.067 に答える
-1

これを試して

if key in data:
   del data[key]
于 2022-02-21T16:24:07.683 に答える