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

Python でキー リストを使用して、ネストされた辞書アイテムに効率的にアクセスし、変更するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-16 02:33:10
オリジナル
965 人が閲覧しました

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

キー リストを介したネストされた辞書項目へのアクセス: ネストされた構造の探索

辞書のような複雑なデータ構造には、多くの場合、トラバースして操作するための効率的な方法が必要です。ネストされたコンテンツ。一般的な課題の 1 つは、指定されたキーのリストに基づいて、ネストされた構造内の特定の項目にアクセスすることです。

既存のアプローチ

これに対処する 1 つの方法は、辞書を使用し、リスト内の各キーを使用して目的の項目を見つけます。ただし、このアプローチは、深くネストされた構造では冗長になり、エラーが発生しやすくなります。

Reduce を使用した改善されたソリューション

よりエレガントで効率的なソリューションには、Python の Reduce を活用することが含まれます。 () 関数。 reduce() は、指定された操作を要素のシーケンスに繰り返し適用し、シーケンスを単一の値に削減します。 Operator.getitem を操作として利用することで、リスト内の各キーを使用して辞書を走査し、関連付けられた値を取得できます。

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

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

値の設定

同じ原則を辞書内の値の変更にも適用できます。 get_from_dict を使用して親辞書と最終キーを見つけることで、新しい値を直接割り当てることができます。

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

追加関数

コア機能の拡張、ネストされた構造を削除および操作するための追加関数を作成できます。たとえば、キーを削除する関数:

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

完全な例

コードの完全なデモは次のとおりです:

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

maplist = ["a", "r"]
print(get_from_dict(dataDict, maplist))  # Output: 1

maplist = ["b", "v", "y"]
print(get_from_dict(dataDict, maplist))  # Output: 2

set_in_dict(dataDict, ["b", "v", "w"], 4)

print(dataDict)  # Output: {'a': {'r': 1, 's': 2, 't': 3}, 'b': {'u': 1, 'v': {'w': 4, 'x': 1, 'y': 2, 'z': 3}, 'w': 3}}
ログイン後にコピー

この改善されたアプローチは、キーのリストを使用して複雑なネストされた辞書構造をナビゲートおよび変更するための簡潔で効率的な方法を提供し、柔軟性とコードを提供します。読みやすさ。

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

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