私は次のような辞書を持っています:
{
"checksum": "b884cbfb1a6697fa9b9eea9cb2054183",
"roots": {
"bookmark_bar": {
"children": [ {
"date_added": "12989159740428363",
"id": "4",
"name": "test2",
"type": "url",
"url": "chrome://bookmarks/#1"
} ],
"date_added": "12989159700896551",
"date_modified": "12989159740428363",
"id": "1",
"name": "bookmark_bar",
"type": "folder"
},
"other": {
"children": [ {
"date_added": "12989159740428363",
"id": "4",
"name": "test",
"type": "url",
"url": "chrome://bookmarks/#1"
} ],
"date_added": "12989159700896557",
"date_modified": "0",
"id": "2",
"name": "aaa",
"type": "folder"
},
"synced": {
"children": [ ],
"date_added": "12989159700896558",
"date_modified": "0",
"id": "3",
"name": "bbb",
"type": "folder"
}
},
"version": 1
}
すべてが「roots」から始まります。URLとフォルダの2種類のデータがあり、それらは辞書です。フォルダの場合は、キー「children」が必要です。キーの値はリストです。さらに多くのURLとフォルダをその中に入れることができます。
ここで、このネストされた辞書をトラバースして、すべてのサブフォルダーのURLを取得したいので、次の関数を作成しました。
def traverse(dic):
for i in dic:
if i['type'] == 'folder':
for j in traverse(i['children']):
yield j
elif i['type'] == 'url':
yield i
そして私はそれをそのように使うことができます:
traverse(dictionary['roots']['bookmark_bar']['children'])
それは完璧に動作します。しかし、それはURLの辞書を生成するだけで、どこにあるのかわかりません。私も道を知りたいです。どうすればいいですか?