0

これは私を夢中にさせています。私はPythonとAppEngineの両方に不慣れで、これを理解できないようです。App Engine によってホストされる単純なアプリを作成しています。私の問題は次のとおりです。for ループを使用して Python 辞書にアクセスできますが、キー文字列を使用して辞書内の項目に直接アクセスすることはできません。

次の JSON 文字列を返す JSON Web サービスを呼び出しています。

{"WA": "Washington", "DE": "Delaware", "DC": "District of Columbia", "WI": "Wisconsin", "WV": "West Virginia", "HI": "Hawaii", "FL": "Florida", "WY": "Wyoming", "NH": "New Hampshire", "NJ": "New Jersey", "NM": "New Mexico", "TX": "Texas", "LA": "Louisiana", "NC": "North Carolina", "ND": "North Dakota", "NE": "Nebraska", "TN": "Tennessee", "NY": "New York", "PA": "Pennsylvania", "CA": "California", "NV": "Nevada", "VA": "Virginia", "CO": "Colorado", "AK": "Alaska", "AL": "Alabama", "AR": "Arkansas", "VT": "Vermont", "IL": "Illinois", "GA": "Georgia", "IN": "Indiana", "IA": "Iowa", "MA": "Massachusetts", "AZ": "Arizona", "ID": "Idaho", "CT": "Connecticut", "ME": "Maine", "MD": "Maryland", "OK": "Oklahoma", "OH": "Ohio", "UT": "Utah", "MO": "Missouri", "MN": "Minnesota", "MI": "Michigan", "RI": "Rhode Island", "KS": "Kansas", "MT": "Montana", "MS": "Mississippi", "SC": "South Carolina", "KY": "Kentucky", "OR": "Oregon", "SD": "South Dakota"}

Python コードは次のとおりです。

states=dict()

url="http://something.com/json"
try:
   response=urllib2.urlopen(url)
   states=json.load(response)
except Exception as ex:
   self.response.write("Google says: %s"%(ex.message))
   self.response.write("<br>Try refreshing the page again")
   SystemExit(0)

ここがややこしいところです。次のステートメントは問題なく実行されます。

for each in states:
  self.response.write(states[each])
  self.response.write("<br>")
  self.response.write(each)
  self.response.write("<br>")

しかし、そのキーを使用して辞書を参照する必要があります。だから、私はこれをしました:

self.response.write(states["IN"])

これはうまくいきません。Google は次のように言っています。

File "/base/data/home/apps/bu3245/1.371010709629673028/test.py", line 42, in get
self.response.write(states["IN"])
KeyError: 'IN'

私は何を間違えましたか?ローカルでデバッグするとコードは機能しますが、アプリ エンジンでは機能しません。すべてのキーと for ループによって吐き出された値を確認できますが、そのキーを使用して辞書にアクセスすると、キー エラーが表示されます。整数をインデックスとして使用しようとすると、KeyError も表示されます。

4

1 に答える 1

3

そのインデックスの値を持つキーで辞書にアクセスしようとしていると見なされるため、インデックスで辞書にアクセスすることはできません。

.get()キーが辞書に存在しない場合でも、キーが.get()返さNoneれるため、アプリがクラッシュしないため、うまくいくと思います。

展開するときに、「IN」が実際に応答内にあることを確認してください。

@karthikrが言ったように、通常は次のように辞書を反復する方が良いです:

for key, value in dictionary.iteritems()
于 2013-10-18T22:51:50.603 に答える