在Python中访问深层嵌套的字典/列表元素/值

时间:2016-08-04 19:56:43

标签: python list dictionary nested

我一直在努力解决这个问题以及从Google Maps API中逐步完成此输出所需的逻辑。

基本上我正在使用谷歌地图Distance_Matrix: 以下是API调用两个地址之间距离/时间的返回信息示例,我已为此示例分配了变量 distanceMatrixReturn

  distanceMatrixReturn = {
            {'destination_addresses': ['This would be ADDRESS 1'],
            'status': 'OK',
            'rows': [
            {
                'elements': [
                 {
                     'duration_in_traffic': {
                           'text': '10 mins', 'value': 619},
                            'status': 'OK',
                             'distance': {'text': '2.8 mi', 'value': 4563},
                             'duration': {'text': '9 mins', 'value': 540}}]}], 
                            }]
              }], 
    'origin_addresses': ['This would be ADDRESS 2'] 
}

现在,成为一个挣扎于嵌套词典和列表的蟒蛇新手; 这是我的思考过程:

我想要访问我的印象所在的值'2.8 mi',该字词位于与“text”键相关联的字典中,而该字典又位于分配给键'distance'的字典中,这是在另一个密钥为'duration_in_traffic'的字典中。

密钥'duration_in_traffic'似乎位于列表中,与字典密钥'elements'绑定,后者又位于与另一个字典密钥'rows'绑定的列表中。

现在,这看起来非常复杂,必须有一种简单的方法来处理这种情况,或者我的逻辑可能只是关于嵌套元素中的嵌套以及访问它们的方法。

例如,在这里的其他帖子中,我已经阅读了以下内容,试图找出解释看似相似的东西的过程。 How to access a dictionary key value present inside a list?

如果我在这篇文章中对distanceMatrixReturn进行了很好的构建,请告诉我。我把它隔开试图让它更具可读性,我希望我已经实现了它。

3 个答案:

答案 0 :(得分:1)

你的字典坏了,所以很难想象正确的道路。反正。

from operator import getitem

path = ["rows", 0, "elements", 0, "duration_in_traffic", "distance", "text"]

reduce(getitem, path, distanceMatrixReturn)  # -> "2.8 mi"

在Python 3上,您必须先从reduce导入functools

答案 1 :(得分:0)

虽然丑陋,但它很简单:

distanceMatrixReturn['rows'][0]['elements'][0]['duration_in_traffic']['distance']['text']

除非你想创建namedtuple或类,否则实际上没有任何更清洁的方法,但实际上你还是要解析出来数据的方式相同 - 您只需在程序的不同部分进行分析即可。

至于哪个选项最好 - 程序的需求将决定这一点。

答案 2 :(得分:0)

如果您尝试从2.8 mi访问distanceMatrixReturn,则可以执行此操作:

 distanceMatrixReturn['rows'][0]['elements'][0]['duration_in_traffic']['distance']['text']