[スポンサーリンク]
ネストされたディクショナリから特定キーの値を全て取得したい
先日Amazon Product Advertising APIから書籍情報を取得しました
【Python3】AmazonProductAdvertisingAPIでISBNから検索して図書情報を取得
ISBNから図書情報を取得したい先日古本屋にて気になった本を買って来たところ本棚に既に同じ本が有りました・・・涙(大した冊数はないのですが)本棚にある本の情報の一覧を作りたいということに至りました本を開...
このレスポンスに複数階層にネストされたディクショナリ形式が含まれていました
ancestorにはAmazon上のカテゴリが含まれています
このカテゴリについて取得をしたいというのが今回の目的です
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
{'data': [{'asin': '4041055776', 'browse_node_info': {'browse_nodes': [{'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': None, 'context_free_name': '本', 'display_name': '本', 'id': '465392'}, 'context_free_name': '本', 'display_name': 'ジャンル別', 'id': '465610'}, 'context_free_name': '文学・評論', 'display_name': '文学・評論', 'id': '466284'}, 'context_free_name': '文芸作品', 'display_name': '文芸作品', 'id': '548206'}, 'children': None, 'context_free_name': '英米文学', 'display_name': '英米文学', 'id': '506988', 'is_root': False, 'sales_rank': 3556}, {'ancestor': {'ancestor': {'ancestor': {'ancestor': None, 'context_free_name': '本', 'display_name': '本', 'id': '465392'}, 'context_free_name': '本', 'display_name': 'ジャンル別', 'id': '465610'}, 'context_free_name': '文学・評論', 'display_name': '文学・評論', 'id': '466284'}, 'children': None, 'context_free_name': 'ミステリー・サスペンス・ハードボイルド', 'display_name': 'ミステリー・サスペンス・ハードボイルド', 'id': '507216', 'is_root': False, 'sales_rank': 4247}, {'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': {'ancestor': None, 'context_free_name': '本', 'display_name': '本', 'id': '465392'}, 'context_free_name': '本', 'display_name': 'ジャンル別', 'id': '465610'}, 'context_free_name': '文学・評論', 'display_name': '文学・評論', 'id': '466284'}, 'context_free_name': '評論・文学研究', 'display_name': '評論・文学研究', 'id': '467262'}, 'context_free_name': '外国文学研究', 'display_name': '外国文学研究', 'id': '507444'}, 'children': None, 'context_free_name': '英米文学研究', 'display_name': '英米文学', 'id': '506992', 'is_root': False, 'sales_rank': 3524}], 'website_sales_rank': {'context_free_name': '本', 'display_name': '本', 'id': None, 'sales_rank': 177092}}, 【略】 |
子階層がディクショナリ形式か判定
下記のコードでなんとか、全カテゴリを取得することが出来ました
対象のディクショナリに、キーancestorが存在し、それがディクショナリ形式であれば値を取得する
1 2 3 |
while isinstance(TargetAncestorElement, dict): 【処理】 TargetAncestorElement = TargetAncestorElement['ancestor'] |
1 2 3 4 5 6 7 |
AncestorDictionary = AmazonSearchItemsApiResultAmazonProduct['browse_node_info']['browse_nodes'] AncestorList = [] for AncestorDictionaryItem in AncestorDictionary: TargetAncestorElement = AncestorDictionaryItem while isinstance(TargetAncestorElement, dict): AncestorList.append(TargetAncestorElement.get('display_name')) TargetAncestorElement = TargetAncestorElement['ancestor'] |
もっときれいに取得したいのですが、書き方を見付けられず・・・
[スポンサーリンク]
コメント