ホームページ >バックエンド開発 >Python チュートリアル >キーのリストを使用して、ネストされた Python ディクショナリ内のデータに効率的にアクセスし、変更するにはどうすればよいですか?

キーのリストを使用して、ネストされた Python ディクショナリ内のデータに効率的にアクセスし、変更するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-23 08:38:16841ブラウズ

How Can I Efficiently Access and Modify Data in Nested Python Dictionaries Using a List of Keys?

キーのリストを使用したネストされた辞書のナビゲーション

問題:

どのようにすれば、効率的にデータにアクセスして操作できるでしょうかのリストを使用した深くネストされた辞書構造キー?

解決策:

ネイティブ Python 関数 functools.reduce を利用すると、単一の関数で辞書を効率的に走査できます。 pass.

実装:

from functools import reduce
import operator

def get_by_path(root, items):
    """Access a nested object in root by item sequence."""
    return reduce(operator.getitem, items, root)

使用法:

指定されたパスの値を取得するには、次を使用します。 get_by_path:

dataDict = {
    "a": {
        "r": 1,
        "s": 2,
        "t": 3
    },
    "b": {
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
    }
}

maplist = ["a", "r"]
value = get_by_path(dataDict, maplist)  # 1

値の設定:

特定のパスに値を設定するには、get_by_path を再利用して親辞書を見つけ、値を辞書に割り当てることができます。望ましいキー:

def set_by_path(root, items, value):
    """Set a value in a nested object in root by item sequence."""
    get_by_path(root, items[:-1])[items[-1]] = value

使用法:

maplist = ["b", "v", "w"]
set_by_path(dataDict, maplist, 4)

追加機能:

完全を期すために、次のように定義することもできます。ネストされた辞書内のキーと値のペアを削除する関数:

def del_by_path(root, items):
    """Delete a key-value in a nested object in root by item sequence."""
    del get_by_path(root, items[:-1])[items[-1]]

以上がキーのリストを使用して、ネストされた Python ディクショナリ内のデータに効率的にアクセスし、変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。