![](/img/trans.png)
[英]TypeError: list indices must be integers or slices, not str dictionary python
[英]Python Dictionary Access Via Keyword (TypeError: list indices must be integers or slices, not str)
我正在嘗試從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 mi”。
我嘗試過的是下面
>>> dirs[0]['summary']
'NJ Tpke S and I-95 S'
>>> dirs[0]['summary'][0]['traffic_speed_entry'][0]
Traceback (most recent call last):
File "<pyshell#117>", line 1, in <module>
dirs[0]['summary'][0]['traffic_speed_entry'][0]
TypeError: string indices must be integers
我也嘗試了這些參考文獻中的方法:
我還導入了numpy的熊貓,並嘗試將其切成薄片。
這是創建字典的代碼:
>>> import googlemaps
>>> from datetime import datetime
>>> gmaps = googlemaps.Client(key='APIKEY')
>>> start = '07042'
>>> end = '20024'
>>> dirs = gmaps.directions(start, end)
當他們返回字典時Google會做些有趣的事情嗎?
“ traffic_speed_entry”位於“ legs”字段中,而不是“ summary”中。 讓我們嘗試一下,一次下標:
dirs[0]
我假設這是您在第一個代碼框中發布的項目。
dirs[0]['summary']
正如您已經提到的,這是字符串“ 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'
dirs[0]['legs'][0]['distance']['text']
應該有效。
這意味着,從dirs[0]
的dict
中,選擇鍵為'legs'
的元素,該元素為列表。
提取該list
的第零個元素,然后從該元素中找到關鍵的'distance'
(這是一個dict
)。
在最后一個元素中找到'text'
,並返回相應的字符串。
請注意:您正在嘗試訪問traffic_speed_entry
,其中不包含您想要的信息。
您要尋找的里程應該在
dirs[0]['legs'][0]['distance']['text']
請注意,您在包含另一個詞典的詞典中有一個列表(以legs
)!
編輯,基於評論:
如何閱讀包含另一本詞典的詞典中的列表?
您只是在呼喚另一個而已。 另請參見上面接受的答案。 請注意, list
是按位置索引的,例如, legs[0]
表示legs
的第一項( 關於列表的教程 )。 在其他情況下,該項目恰好是一本字典(實際上可以是任何東西)。 與列表不同,可以像上面一樣( 通過dicts教程 )通過其鍵訪問此字典。 在這里,我們想要存儲在關鍵distance
下的內容。 或者,我們可以將鍵traffic_speed_entry
拔出。
那顯然是讓我困惑的地方。 距離,文字是清單嗎? 腿和腿是字典嗎?
請注意,列表在Python中用[
和]
表示,字典在{
和}
。 列表是事物的列表(例如[1,'aaa']
),而字典將鍵與值相關聯(例如{key1:1, key2:'aaa'}
)。 考慮到這一點,請嘗試閱讀您的示例。
您可以像這樣組裝示例:
dirs
大概是一個列表; 我們使用[0]
提取其第一項。
此項是一個字典(我們知道,因為在您發布的示例中它位於{
,所以我們通過調用['legs']
提取與關鍵legs
關聯的值。該值恰好是一個列表。
就像上面一樣,我們通過[0]
訪問該列表中的第一項。 等等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.