「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python で反復中に辞書から項目を安全に削除するにはどうすればよいですか?

Python で反復中に辞書から項目を安全に削除するにはどうすればよいですか?

2024 年 11 月 12 日に公開
ブラウズ:108

How to Safely Delete Items from a Dictionary While Iterating in Python?

辞書の反復変更

辞書を反復しながら、同時に辞書から項目を削除する必要があるのが一般的です。ただし、この操作は Python ではネイティブにサポートされていません。

辞書を反復処理中に変更すると、エラーが発生する可能性があります。たとえば、指定したコード スニペットは、Python 3 で次のエラーで失敗する可能性があります:

RuntimeError: dictionary changed size during iteration.

Python 3 Solution

Python 3 では、解決策は辞書からキーのリストを作成し、代わりにそのリストを反復処理することです。以下に例を示します:

# Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]

リストは不変であり、辞書への変更の影響を受けないため、このアプローチは機能します。

Python 2 ソリューション

Python 2 では、keys() メソッドは反復子を返しますが、反復中にこの反復子を変更することはできません。辞書を変更するには、次の方法を使用できます:

# Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]

Python 2 では、mydict.keys() の

for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]

代替アプローチ

代わりに、pop() メソッドを使用して、反復中に辞書から項目を削除することもできます。

for k in list(mydict.keys()):
    if k == 3:
        mydict.pop(k)

このアプローチは追加のリストを作成しないため、より効率的であることに注意してください。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3