Python辞書からキーを削除する方法は?

2012年07月01日に質問されました。  ·  閲覧回数 1.7M回  ·  ソース

Tony picture
2012年07月01日

辞書からキーを削除するとき、私は以下を使用します:

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

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

回答

Sven Marnach picture
2012年07月01日
3203

辞書にあるかどうかに関係なくキーを削除するには、 dict.pop()の2つの引数形式を使用します。

my_dict.pop('key', None)

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

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

del my_dict['key']

キーが辞書にない場合、これによりKeyErrorが発生します。

zigg picture
2012年07月01日
378

具体的には、「これを行うための1行の方法はありますか?」と答えます。

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

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

ただし、 dictからオブジェクトを削除するこの方法はアトミックでif間に'key'my_dictにある可能性があります。 ifステートメント。ただし、 delが実行される前に削除される場合があります。その場合、 delKeyError失敗します。 これを考えると、 dict.popまたは次のようなものを

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

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

Akavall picture
2013年03月05日
164

my_dict.pop("key", None)が正確に何をしているのかを理解するのに少し時間がかかりました。 だから私は他のグーグル時間を節約するための答えとしてこれを追加します:

pop(key[, default])

キーが辞書にある場合は、それを削除してその値を返します。それ以外の場合は、ますデフォルトキーが辞書にない場合、 KeyErrorが発生します。

ドキュメンテーション

Peter Smit picture
2016年12月07日
59

del my_dict[key]は、キーが存在する場合に辞書からキーを削除する場合、 my_dict.pop(key)よりもわずかに高速です。

>>> import timeit
>>> setup = "d = {i: i for i in range(100000)}"

>>> timeit.timeit("del d[3]", setup=setup, number=1)
1.79e-06
>>> timeit.timeit("d.pop(3)", setup=setup, number=1)
2.09e-06
>>> timeit.timeit("d2 = {key: val for key, val in d.items() if key != 3}", setup=setup, number=1)
0.00786

ただし、キーが存在しない場合、 if key in my_dict: del my_dict[key]my_dict.pop(key, None)よりもわずかに高速です。 どちらも、 try / exceptステートメントのdelよりも少なくとも3倍高速です。

>>> timeit.timeit("if 'missing key' in d: del d['missing key']", setup=setup)
0.0229
>>> timeit.timeit("d.pop('missing key', None)", setup=setup)
0.0426
>>> try_except = """
... try:
...     del d['missing key']
... except KeyError:
...     pass
... """
>>> timeit.timeit(try_except, setup=setup)
0.133
Marc Maxmeister picture
2015年09月17日
55

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

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」はエラーを引き起こしませんでした。

Shameem picture
2016年12月07日
31

辞書内包表記を使用して、そのキーを削除した新しい辞書を作成できます。

>>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}

条件により削除できます。 keyが存在しなくても、エラーは発生しません。

Sarthak Gupta picture
2018年05月02日
15

「del」キーワードの使用:

del dict[key]
M.Innat picture
2018年05月19日
8

以下のいくつかの方法で、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}

delpopの違いは、 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

これが役立つと思われる場合は、後で参照できるようにこの要点をフォークし

Alec Alameddine picture
2019年05月25日
5

非常に冗長にしたい場合は、例外処理を使用できます。

try: 
    del dict[key]

except KeyError: pass

ただし、キーが存在しない場合、これはpop()メソッドよりも遅くなります。

my_dict.pop('key', None)

いくつかのキーについては問題ではありませんが、これを繰り返し行う場合は、後者の方法の方が適しています。

最速のアプローチはこれです:

if 'key' in dict: 
    del myDict['key']

ただし、この方法は危険です。2つの行の間で'key'を削除すると、 KeyErrorが発生するためです。

Anshika Singh picture
2020年06月21日
4

ディクショナリデータ型にはdict_name.pop(item)というメソッドがあり、これを使用してディクショナリからキーと値のペアを削除できます。

a={9:4,2:3,4:2,1:3}
a.pop(9)
print(a)

これにより、出力は次のようになります。

{2: 3, 4: 2, 1: 3}

このようにして、辞書から1行でアイテムを削除できます。