辞書からキーを削除するときは、次を使用します。
if 'key' in my_dict:
del my_dict['key']
これを行う1行の方法はありますか?
辞書からキーを削除するときは、次を使用します。
if 'key' in my_dict:
del my_dict['key']
これを行う1行の方法はありますか?
ディクショナリにあるかどうかに関係なくキーを削除するには、次の 2 つの引数形式を使用しますdict.pop()
。
my_dict.pop('key', None)
辞書に存在するmy_dict[key]
場合は返され、そうでない場合は返されます。2 番目のパラメーターが指定されておらず (つまり)、存在しない場合は、 aが発生します。key
None
my_dict.pop('key')
key
KeyError
存在することが保証されているキーを削除するには、次を使用することもできます。
del my_dict['key']
KeyError
キーがディクショナリにない場合、これは a を発生させます。
具体的には、「これを行う1行の方法はありますか?」
if 'key' in my_dict: del my_dict['key']
...まあ、あなたは尋ねました;-)
ただし、 からオブジェクトを削除するこの方法はアトミックdict
ではないことを考慮する必要があります— がステートメントの実行中にある可能性がありますが、が実行される前に削除される可能性があります。その場合、 で失敗します。これを考えると、または次のようなものを使用するのが最も安全です'key'
my_dict
if
del
del
KeyError
dict.pop
try:
del my_dict['key']
except KeyError:
pass
もちろん、これは間違いなくワンライナーではありません。
正確に何をしているのかを理解するのに時間がかかりましたmy_dict.pop("key", None)
。したがって、他の人のグーグル時間を節約するために、これを回答として追加します。
pop(key[, default])
keyがディクショナリにある場合は、それを削除してその値を返します。そうでない場合はdefaultを返します。defaultが指定されておらず、キーが辞書にない場合は、 a
KeyError
が発生します。
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」はエラーを引き起こしませんでした。
次のいくつかの方法で、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
これが役立つと思われる場合は、将来の参照用にこの要点をフォークしてください。
これを試して
if key in data:
del data[key]