キー リストを使用したネストされた辞書項目へのアクセス
複雑な辞書構造を扱う場合、特定の項目にアクセスするためにそれらを走査することが一般的な課題になることがあります。これらの辞書をナビゲートするには、効率的かつ柔軟なアプローチを見つけることが重要です。
次のようなネストされた辞書があるシナリオを考えてみましょう。
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 サイトの他の関連記事を参照してください。