3

Weather Underground API から履歴データを取得しようとしています。私は彼らの Python サンプル コードを適合させました (以下を参照)。これを実行すると、「TypeError: リスト インデックスは str ではなく整数である必要があります」という例外が発生します。リスト。

URL を JSON ビューアに入力して構造を確認しましたが、何が間違っているのかわかりません。どんな助けでも大歓迎です。

import urllib2
import json
f = urllib2.urlopen('http://api.wunderground.com/api/d08c4738fb303c66/geolookup/conditions/q/CA/San_Francisco.json')

json_string = f.read()
parsed_json = json.loads(json_string)
location = parsed_json['location']['city']
temp_f = parsed_json['current_observation']['temp_f']
print "Current temperature in %s is: %s" % (location, temp_f)
f.close()

h = urllib2.urlopen('http://api.wunderground.com/api/d08c4738fb303c66/history_19760508/q/CA/San_Francisco.json')
json_string = h.read()
parsed_json = json.loads(json_string)
date = parsed_json['history']['utcdate']['pretty']
print date

print type(parsed_json['history'])

snow = parsed_json['history']['dailysummary']['0']
print snow
h.close()
4

3 に答える 3

2

それはエラーの中であなたの問題を言います: You can't index a list with a string:

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

しかし、ここでそれを行います:

snow = parsed_json['history']['dailysummary']['0']

問題を解決するには、インデックスを整数にします。

snow = parsed_json['history']['dailysummary'][0]
于 2013-08-26T18:59:54.997 に答える
0

parsed_jsondictの内容にアクセスする方法は、キーを使用することです。使用したいキーを見つけることができますprint parsed_json['history']['dailysummary'].keys()

u'snow'これを行うと、キーの 1 つがUnicode 文字列であることがわかります。

次の代わりに、その文字列を使用して、探しているデータにアクセスできます。

parsed_json['history']['dailysummary']['0']

必要なものは次のとおりです。

parsed_json['history']['dailysummary']['snow']

于 2014-05-08T18:09:39.980 に答える