python - 如何在 Python 中的这个嵌套字典中搜索特定键?

标签 python python-3.x dictionary nested amazon-mws

我是编程新手,我正在尝试从亚马逊 MWS API 中提取值。它返回我见过的最大的嵌套字典,但我无法弄清楚如何循环遍历它以找到我需要的值。

例子:

{'Products': {'Product': {'AttributeSets': {'ItemAttributes': {'Binding': {'value': 'Video '
                                                                                'Game'},
                                                           'Brand': {'value': 'Nintendo'},
                                                           'Color': {'value': 'blue'},
                                                           'ESRBAgeRating': {'value': 'Everyone'},
                                                           'HardwarePlatform': {'value': 'Android/iOS'},
                                                           'IsAdultProduct': {'value': 'false'},
                                                           'ItemDimensions': {'Height': {'Units': {'value': 'inches'},
                                                                                         'value': '5.00'},
                                                                              'Length': {'Units': {'value': 'inches'},
                                                                                         'value': '5.00'},
                                                                              'Weight': {'Units': {'value': 'pounds'},
                                                                                         'value': '0.10'},
                                                                              'Width': {'Units': {'value': 'inches'},
                                                                                        'value': '2.00'}},
                                                           'Label': {'value': 'Nintendo'},
                                                           'Languages': {'Language': {'Name': {'value': 'english'},
                                                                                      'Type': {'value': 'Unknown'}}},
                                                           'ListPrice': {'Amount': {'value': '34.99'},
                                                                         'CurrencyCode': {'value': 'USD'}},
                                                           'Manufacturer': {'value': 'Nintendo'},
                                                           'Model': {'value': 'PMCAPBAA'},
                                                           'OperatingSystem': [{'value': 'Not '
                                                                                         'Machine '
                                                                                         'Specific'},
                                                                               {'value': 'Android/iOS'}],
                                                           'PackageDimensions': {'Height': {'Units': {'value': 'inches'},
                                                                                            'value': '1.00'},
                                                                                 'Length': {'Units': {'value': 'inches'},
                                                                                            'value': '5.10'},
                                                                                 'Weight': {'Units': {'value': 'pounds'},
                                                                                            'value': '0.04'},
                                                                                 'Width': {'Units': {'value': 'inches'},
                                                                                           'value': '2.90'}},
                                                           'PackageQuantity': {'value': '1'},
                                                           'PartNumber': {'value': 'PMCAPBAA'},
                                                           'Platform': [{'value': 'Not '
                                                                                  'Machine '
                                                                                  'Specific'},
                                                                        {'value': 'Android'},
                                                                        {'value': 'iOS'},
                                                                        {'value': 'Nintendo '
                                                                                  'Wii'}],
                                                           'ProductGroup': {'value': 'Video '
                                                                                     'Games'},
                                                           'ProductTypeName': {'value': 'VIDEO_GAME_ACCESSORIES'},
                                                           'Publisher': {'value': 'Nintendo'},
                                                           'ReleaseDate': {'value': '2016-09-16'},
                                                           'SmallImage': {'Height': {'Units': {'value': 'pixels'},
                                                                                     'value': '75'},
                                                                          'URL': {'value': 'http://ecx.images-amazon.com/images/I/41%2B1-PwEz4L._SL75_.jpg'},
                                                                          'Width': {'Units': {'value': 'pixels'},
                                                                                    'value': '75'}},
                                                           'Studio': {'value': 'Nintendo'},
                                                           'Title': {'value': 'Nintendo '
                                                                              'Pokemon '
                                                                              'Go '
                                                                              'Plus'},
                                                           'lang': {'value': 'en-US'}}},
                      'Identifiers': {'MarketplaceASIN': {'ASIN': {'value': 'B01H482N6E'},
                                                          'MarketplaceId': {'value': 'ATVPDKIKX0DER'}}},
                      'Relationships': {},
                      'SalesRankings': {'SalesRank': [{'ProductCategoryId': {'value': 'video_games_display_on_website'},
                                                       'Rank': {'value': '35'}},
                                                      {'ProductCategoryId': {'value': '14218821'},
                                                       'Rank': {'value': '1'}},
                                                      {'ProductCategoryId': {'value': '471304'},
                                                       'Rank': {'value': '22'}}]}}}}

我怎样才能找到“Title”的值,或者从这本字典中找到“Title”值的最佳方法是什么?

当我尝试实现我在 Stackoverflow 上找到的类似递归解决方案时,我得到一个 None 值。

我试过:

def recursive_lookup(k, d):
    if k in d:
        return d[k]
    for v in d.values():
        if isinstance(v, dict):
            return recursive_lookup(k, v)
    return None

print(recursive_lookup('Title', productData.parsed))

最佳答案

您的代码的问题在于您没有回溯到其他词典。在返回之前,您不会遍历所有项目。通过返回,您切断了循环。

下面的代码循环遍历所有的字典,直到找到 key 或检查所有字典但一无所获后才返回。

def recursive_lookup(k, d):
    if k in d: return d[k]
    for v in d.values():
        if isinstance(v, dict):
            a = recursive_lookup(k, v)
            if a is not None: return a
    return None

关于python - 如何在 Python 中的这个嵌套字典中搜索特定键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662970/

相关文章:

javascript - 如何在 Python 中使用 Selenium 获取 JavaScript 元素?

python - 一行返回包含另一个键值的列表中第一个字典中的字典键值

python - 我可以相信 dict 的顺序在每次迭代时都保持不变吗?

variables - 是否有变量命名约定的简明目录?

python - 运行tornado应用程序时如何关闭终端?

python - 如何在 pyqt 中向 Qtablewidget 添加布局?

python-3.x - urllib.error.URLError : <urlopen error unknown url type: 'https>

Python 3.7 anaconda 环境-import _ssl DLL 加载失败错误

python - PIL加载灰度图像的RGB矩阵

python - 在某些条件下从列表中提取数据