Python
の辞書の辞書の深い合併は、複数の辞書とネストされたキーを融合することは挑戦的な作業です。次の例を考えてみましょう:
dict1 = { 1: {"a": {"A"}}, 2: {"b": {"B"}} } dict2 = { 2: {"c": {"C"}}, 3: {"d": {"D"}} }
目的の出力は:
dict3 = { 1: {"a": {"A"}}, 2: {"b": {"B"}, "c": {"C"}}, 3: {"d": {"D"}} }
この深いマージを達成するために、再帰関数を利用できます:
def merge(a: dict, b: dict, path=[]): for key in b: if key in a: if isinstance(a[key], dict) and isinstance(b[key], dict): merge(a[key], b[key], path [str(key)]) else: a[key] = b[key] else: a[key] = b[key] return a
を返すこの関数は、2つの辞書、aとb、およびネストされた構造の現在の場所を追跡するパスを採用します。 Bのキーを繰り返し、Aに対応するキーが存在するかどうかをチェックします。そのキーの値が両方とも辞書である場合、それらのサブディクショナリをマージするためにマージ関数を再帰的に呼び出します。それ以外の場合は、上記の例については、bから値をbから値で更新します。マージ関数は、目的の結果を生成します:
print(merge(dict1、dict2)) 1:{'a':{'a'}}、 2:{'b':{'b'}、 'c':{'c'}}、 3:{'d':{'d'}} }
print(merge(dict1, dict2))注:
この関数は最初の辞書を変異させます。内容を保存したい場合は、マージする前にコピーを作成できます。たとえば、マージ(dict(a)、b)。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3