通过关键字访问Python字典(TypeError:列表索引必须是整数或切片,而不是str)

2024-09-28 01:29:53 发布

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

我试图从googlemaps查询中选择距离。数据似乎是通过字典返回的。但是,我无法获得我需要的信息。在

我在看什么

{'copyrights': 'Map data ©2017 Google', 'warnings': [], 'summary': 'NJ Tpke 
S and I-95 S', 'legs': [{'traffic_speed_entry': [], 'distance': {'value': 
365542, 'text': '227 mi'},

我要的是“227英里”。在

下面是我所尝试的

^{pr2}$

我也尝试了这些参考资料中的方法:

accessing-elements-of-python-dictionaryinverse-dictionary-lookup-in-python

我还引进了熊猫,纽比,试着把它切成片。在

以下是创建字典的代码:

>>> import googlemaps
>>> from datetime import datetime
>>> gmaps = googlemaps.Client(key='APIKEY')
>>> start = '07042'
>>> end = '20024'
>>> dirs = gmaps.directions(start, end)

谷歌在归还字典时会做些有趣的事情吗?在


Tags: 数据import信息距离mapdatadatetimedictionary
3条回答

你要找的里程应该在

dirs[0]['legs'][0]['distance']['text']

请注意,您在一个包含另一个字典的字典中有一个列表(在legs)中!在

根据评论进行编辑:

How do I read a list within a dictionary which contains another dictionary?

你只是有点随叫随到。另请参阅上面接受的答案。注意,list是按位置索引的,例如,legs[0]表示legstutorial on lists)中的第一项。这一项碰巧是一本字典(它可能是任何东西,真的)。这个字典不同于列表,可以通过它的键来访问,正如上面所做的(tutorial on dicts)。这里,我们需要存储在键distance下的内容。或者,我们可以把钥匙traffic_speed_entry拔出。在

That is clearly what confused me. The distance, text is the list? Legs & dirs are the dictionary?

注意,在Python中,列表由[]表示,字典由{}和{}表示。列表是事物的列表(例如[1,'aaa']),而字典将键与值相关联(例如{key1:1, key2:'aaa'})。试着读你的例子。在

你可以这样组合你的例子:

  1. dirs大概是一个列表;我们使用[0]来提取它的第一项。

  2. 这个条目是一个字典(我们知道这是因为在您发布的示例中它位于{中。我们通过调用['legs']来提取与键legs相关联的值。这个值正好是一个列表。

  3. 就像上面一样,我们通过[0]访问该列表中的第一项。等等。

dirs[0]['legs'][0]['distance']['text']应该可以。在


这意味着,从dirs[0]中的dict,选择键为'legs'的元素,这是一个列表。在

提取该list的第零个元素,并从该元素中找到键'distance'(它是dict)。在

在最后一个元素中找到'text',并返回相应的字符串。在


请注意:您试图访问traffic_speed_entry,它不包含您想要的信息。在

“traffic_speed_entry”在“legs”字段,而不是“summary”。让我们尝试一下,一次一个下标:

dirs[0]

我假设这就是你在第一个代码框中发布的条目。在

^{pr2}$

正如您已经注意到的,这是字符串'NJ Tpke S and I-95 S'。在

dirs[0]['summary'][0]

这是字符串开头的字母“N”。在

dirs[0]['summary'][0]['traffic_speed_entry']

这相当于

'N'['traffic_speed_entry']

您正在尝试将一个字符串与另一个字符串建立索引。在

解决方案

你需要正确地访问这个字段。在

dirs[0]['legs'][0]['distance']['text']

我建议您尝试一次添加一个元素,检查是否达到了预期的效果:

>>> dirs = [ {'copyrights': 'Map data 2017 Google', 'warnings': [],
              'summary': 'NJ Tpke S and I-95 S',
              'legs': [{'traffic_speed_entry': [], 
                        'distance': {'value':365542, 
                                     'text': '227 mi'}}]},
             "other dictionaries"  ]
>>> dirs[0]
{'legs': [{'traffic_speed_entry': [], 
     'distance': {'text': '227 mi', 'value': 365542}}], 
     'summary': 'NJ Tpke S and I-95 S', 
     'copyrights': 'Map data 2017 Google', 'warnings': []}
>>> dirs[0]['summary']
'NJ Tpke S and I-95 S'
>>> dirs[0]['summary'][0]
'N'
>>> dirs[0]['legs']
[{'traffic_speed_entry': [], 
  'distance': {'text': '227 mi', 'value': 365542}}]
>>> dirs[0]['legs'][0]
{'traffic_speed_entry': [], 
 'distance': {'text': '227 mi', 'value': 365542}}
>>> dirs[0]['legs'][0]['distance']
{'text': '227 mi', 'value': 365542}
>>> dirs[0]['legs'][0]['distance']['text']
'227 mi'

相关问题 更多 >

    热门问题