0

次のpythondict"mydict"がある場合:

mydict = {
       "folder": "myfolder",
       "files": [
    { "folder": "subfolder",
    "files": []
    },
    { "folder": "anotherfolder",
    "files": [
    { "folder": "subsubfolder",
    "files": []
    },
    { "folder": "subotherfolder",
    "files": []
    }
    ]
    },
         ]
    }

別のdict「newdict」がある場合、どうすればそれを作成できますか?

newdict = {
"folder":"newfolder"
"files":[]
}

どのように/関数を書くことは可能ですか?2つの引数(「追加される現在の辞書」、「追加したい辞書」、「foldername-to-insert-under」で関数を呼び出した後、次のようになります。

desiredfunction(mydict, newdict, "subsubfolder")

既存の「mydict」で適切な「files」配列を検索して「newdict」を追加する関数が必要です。

mydict = {
       "folder": "myfolder",
       "files": [
    { "folder": "subfolder",
    "files": []
    },
    { "folder": "anotherfolder",
    "files": [
    { "folder": "subsubfolder",
    "files": [
{
"folder":"newfolder"
"files":[]
}
]
    },
    { "folder": "subotherfolder",
    "files": []
    }
    ]
    },
         ]
    }

これを行うための最良の方法は何ですか?既存の辞書構造を検索する方法/可能であれば、ネストされた辞書の複数のレベル内を検索して、前に新しい辞書を適切に挿入する方法がわかりません。助けていただければ幸いです。

4

1 に答える 1

0

データ構造の形状 (ネストされたレベル、タイプなどの量) がわかっている場合は、適切な量の for ループを含むプロシージャを記述して、データ構造を反復処理し、キーを見つけることができます。

データ構造の形状がわからない場合は、データ構造が空になるか、適切なキーが見つかるまで、データ構造を再帰的にトラバースできます。

EDIT:ああ、あなたは古いdictの中に新しいdictを追加したいと思っています。古い辞書から新しい辞書に何かを追加したいと思っていました。

元。dict のキー 'z' の下に 'something' を挿入したい場合、そして dict が常にどのように見えるかを知っているなら、

example = {0: {'a': 'dummy'}, 1: {'z': 'dummy'}}
for thing1 in example:
    for thing2 in thing1:
        if thing2 == 'z':
            example[thing1][thing2] = 'something'

dict がどのように表示されるかわからない場合、または for ループをハードコーディングしたくない場合は、

example = {0: {'a': 'dummy'}, 1: {'b': {'z': 'dummy'}}}
replacement = 'something'
path = [1, 'b', 'z']

parent = example
while path:
    key = path.pop(0)
    if path:
        parent = parent[key]
    else:
        parent[key] = replacement

print example

wherepathは、dict をトラバースする再帰プロシージャの再帰呼び出しに引数として渡すことができます。

于 2013-01-17T04:29:38.820 に答える