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

2024-04-20 11:16:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在绞尽脑汁解决这个问题,以及从googlemapsapi逐步输出所需的逻辑。在

实际上,我使用的是谷歌地图距离矩阵: 下面是一个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'] 
}

现在,作为一个python新手,正在为嵌套字典和列表而挣扎; 以下是我的思考过程:

我想访问值'2.8 mi',在我的印象中,这个值在一个与键“text”相关的字典中,而这个字典又在一个分配给键'distance'的字典中,该键在另一个具有键'duration_in_traffic'的字典中。在

'duration_in_traffic'似乎在一个列表中,与字典键'elements'相关联,后者又在一个与另一个字典键'rows'相关联的列表中。在

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

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

请让我知道,如果我在这篇文章的距离矩阵返回结构不好。我把它隔开,让它更具可读性,我希望我已经做到了。在


Tags: textin距离列表字典valueaddresses矩阵
3条回答

如果您试图从distanceMatrixReturn访问2.8 mi,可以执行以下操作:

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

你的字典坏了,很难想象正确的道路。不管怎样。在

from operator import getitem

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

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

在python3上,必须首先从functools导入reduce。在

虽然难看,但很简单:

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

实际上没有任何更干净的方法来实现这一点,除非您想创建namedtuple或类,但实际上您仍然要以相同的方式解析数据-只需在程序的不同部分进行分解。在

至于哪种选择是最好的-你的程序的需要将决定这一点。在

相关问题 更多 >