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

Linda Hamilton
リリース: 2024-11-02 18:01:29
オリジナル
261 人が閲覧しました

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

辞書の反復変更

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

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

RuntimeError: dictionary changed size during iteration.
ログイン後にコピー

Python 3 の解決策

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

<code class="python"># Python 3 or higher

for k in list(mydict.keys()):
    if mydict[k] == 3:
        del mydict[k]</code>
ログイン後にコピー

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

Python 2 ソリューション

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

<code class="python"># Python 2

for k, v in mydict.items():
    if v == 3:
        del mydict[k]</code>
ログイン後にコピー

Python 2 では、反復子をリストに変換することもできます:

<code class="python">for k in mydict.keys():
    if mydict[k] == 3:
        del mydict[k]</code>
ログイン後にコピー

代替アプローチ

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

<code class="python">for k in list(mydict.keys()):
    if k == 3:
        mydict.pop(k)</code>
ログイン後にコピー

このアプローチは、追加リスト。

以上がPython で反復中に辞書から項目を安全に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート