ホームページ > バックエンド開発 > Python チュートリアル > Python でキー リストを使用して、ネストされた辞書アイテムに効率的にアクセスし、変更する方法

Python でキー リストを使用して、ネストされた辞書アイテムに効率的にアクセスし、変更する方法

Barbara Streisand
リリース: 2024-12-18 16:47:14
オリジナル
215 人が閲覧しました

How to Efficiently Access and Modify Nested Dictionary Items Using a Key List in Python?

キー リストを使用したネストされた辞書項目へのアクセス

複雑な辞書構造を扱う場合、特定の項目にアクセスするためにそれらを走査することが一般的な課題になることがあります。これらの辞書をナビゲートするには、効率的かつ柔軟なアプローチを見つけることが重要です。

次のようなネストされた辞書があるシナリオを考えてみましょう。

dataDict = {
    "a": {
        "r": 1,
        "s": 2,
        "t": 3
    },
    "b": {
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
    }
}
ログイン後にコピー

これらの項目には、次のリストを使用してアクセスする必要がある場合があります。 ["a"、"r"] または ["b"、"v"、"y"] などのキー。以下のアプローチは機能するかもしれません:

# Get a given data from a dictionary with position provided as a list
def getFromDict(dataDict, mapList):
    for k in mapList:
        dataDict = dataDict[k]
    return dataDict
ログイン後にコピー

Python のreduce()を使用するより効率的なメソッドが存在します:

from functools import reduce  # forward compatibility for Python 3
import operator

def getFromDict(dataDict, mapList):
    return reduce(operator.getitem, mapList, dataDict)
ログイン後にコピー

この改良されたメソッドは、演算子を使用して辞書を走査するためにreduceを利用します。 .getitem 関数を使用して、キー リストを使用してネストされた各項目にアクセスします。

値を設定する場合、getFromDict を利用して正しい値を見つけることができます。 「親」辞書を作成し、値を割り当てます。

def setInDict(dataDict, mapList, value):
    getFromDict(dataDict, mapList[:-1])[mapList[-1]] = value
ログイン後にコピー

このメソッドは、データ構造内の適切な場所まで辞書を効率的に走査し、値を更新します。

最後に、snake_case を提供できます。関数名を追加し、混合データ型を処理できるようにこれらの関数を拡張すると、次のようになります。

from functools import reduce  # forward compatibility for Python 3
import operator

def get_by_path(root, items):
    return reduce(operator.getitem, items, root)

def set_by_path(root, items, value):
    get_by_path(root, items[:-1])[items[-1]] = value

def del_by_path(root, items):
    del get_by_path(root, items[:-1])[items[-1]]
ログイン後にコピー

これらの関数は、ナビゲーションや操作のための多用途のユーティリティを提供します。ネストされた辞書、リスト、またはその 2 つの組み合わせを操作します。

以上がPython でキー リストを使用して、ネストされた辞書アイテムに効率的にアクセスし、変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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