簡體   English   中英

通過關鍵字訪問Python字典(TypeError:列表索引必須是整數或切片,而不是str)

[英]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

我也嘗試了這些參考文獻中的方法:

在Python中訪問Python字典元素和字典 反向查找

我還導入了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'} )。 考慮到這一點,請嘗試閱讀您的示例。

您可以像這樣組裝示例:

  1. dirs大概是一個列表; 我們使用[0]提取其第一項。

  2. 此項是一個字典(我們知道,因為在您發布的示例中它位於{ ,所以我們通過調用['legs']提取與關鍵legs關聯的值。該值恰好是一個列表。

  3. 就像上面一樣,我們通過[0]訪問該列表中的第一項。 等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM