为什么这是一个字符串而不是一个整数?两行代码看起来相似,但行为不同



我从神童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()

当日落时间打印良好时,高点时间会产生错误"列表索引必须是整数,而不是str"

对python很陌生,只是想找到我的路。请对我宽容一点,这里的一些对话似乎很吓人。

EDIT这里是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": []
  }
}

在没有看到源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的值是一个列表,尽管您的数据是空的,所以我不确定里面是什么。

如果它是一个具有日期值的摘要dict列表,那么你可以这样做:

# assume:  parsed_json['tide']['tideSummary'] = [{"date":"value"}]
for summary in parsed_json['tide']['tideSummary']:
    print summary['date']

同样,这假设它们是{"date":"value"} 的列表

相关内容

最新更新