2012-07-25 47 views
-3

我把數據從wunderground API的代碼和一個行:爲什麼這是一個字符串,而不是一個整數?兩行代碼看起來相似,但表現不同

sunsethour = parsed_json ['moon_phase']['sunset']['hour'] 
sunsetminute = parsed_json ['moon_phase']['sunset']['minute'] 
print "\nSunset is at: %s:%s" % (sunsethour, sunsetminute) 
hightide = parsed_json ['tide']['tideSummary']['date'] 
print (hightide) 
f.close() 

在日落時打印精細,hightide時產生錯誤「名單指數必須是整數,而不是str「

python非常新,只是試圖找到我的方式。請在我身上輕鬆一下,這裏的一些對話似乎很嚇人。

編輯這裏是JSON:http://api.wunderground.com/api/a66b1087ab1e51a5/geolookup/conditions/astronomy/tide/q/MA/Boston.json

截斷例如:

{ 
    "tide": { 
    "tideInfo": [ 
     { 
     "tideSite": "Chelsea St. Bridge, Chelsea River, ...", 
     "lon": "-71.0233", 
     "units": "feet", 
     "tzname": "America/New_York", 
     "lat": "42.3867", 
     "type": "tide" 
     } 
    ], 
    "tideSummaryStats": [ 
     { 
     "minheight": 99.0, 
     "maxheight": -99.0 
     } 
    ], 
    "tideSummary": [] 
    } 
} 
+2

一個列表,其中是源數據? – jdi 2012-07-25 18:45:01

+3

那麼,'parsed_json ['tide'] ['tideSummary']'或'parsed_json ['tide']'的價值是什麼?如果我們不知道您正在使用哪些數據,我們無法幫助您。這個錯誤信息非常清晰:無論是'parsed_json ['tide']'還是'parsed_json ['tide'] ['tideSummary']'都是**列表**,而不是您想象的字典。查看數據並使用適當的方法訪問它。 – 2012-07-25 18:45:04

+1

請顯示完整的堆棧跟蹤。 http://sscce.org/ – Marcin 2012-07-25 18:45:08

回答

3

沒有看到源JSON,這裏是我目前可以提供最好的:

hightide = parsed_json ['tide']['tideSummary']['date'] 

這假定根元素和兩個子元素都是字典,可以通過字符串鍵來訪問。顯然這些數據元素之一是一個列表而不是字典:

parsed_json['tide'] # could be a list of tides? 
parsed_json['tide']['tideSummary'] # could be a list of tide summaries? 
parsed_json['tide']['tideSummary']['date'] # could be a list of dates? 

所有這些都必須產生字典。看值,看看其中是否有實際列出:

aList = ['1','2','3'] 
aDict = {'1':1, '2':2, '3':3} 

>>> aList['1'] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: list indices must be integers, not str 

>>> aDict['1'] 
1 

更新

從你的JSON結構的更新,它是parsed_json ['tide']['tideSummary'],是造成你的問題。 tideSummary的值是一個列表,雖然你的數據有空,所以我不知道里面是什麼。

如果它是總結類型的字典列表有日期值,那麼你可以這樣做:

# assume: parsed_json['tide']['tideSummary'] = [{"date":"value"}] 

for summary in parsed_json['tide']['tideSummary']: 
    print summary['date'] 

...同樣,這個假設它們的{"date":"value"}

+0

非常感謝你的幫助。似乎問題的一部分與數據並不總是出現在json中有關。因此@jdi發現tideSummary爲空。自從我第一次發佈以來,它一直在關閉。可能是時間去其他地方查看我的數據了。 – mbs11 2012-07-26 00:43:56

+0

@ user1550220:好的,如果數據源是可靠的,那就好了。但只要你檢查它是一個列表,不管它是否爲空,它都不應該像這樣崩潰。 – jdi 2012-07-26 00:49:47

相關問題