2

これが私のjson応答です

{u'kind': u'bigquery#queryResponse', u'rows': [{u'f': [{u'v': u'1'}, {u'v': u'1607'}, {u'v': u'coriolanus'}]}, {u'f': [{u'v': u'1'}, {u'v': u'1596'}, {u'v' : u'kingjohn'}]}, {u'f': [{u'v': u'1'}, {u'v': u'1599'}, {u'v': u'kinghenryv' }]}, {u'f': [{u'v': u'1'}, {u'v': u'1600'}, {u'v': u'merrywivesofwindsor'}]}, { u'f': [{u'v': u'1'}, {u'v': u'1602'}, {u'v': u'troilusandcressida'}]}, {u'f': [{u'v': u'1'}, {u'v': u'1592'}, {u'v': u'comedyoferrors'}]}, {u'f': [{u'v ': u'2'},{u'v': u'1590'}, {u'v': u'3kinghenryvi'}]}, {u'f': [{u'v': u'2'}, {u'v' : u'1612'}, {u'v': u'kinghenryviii'}]}, {u'f': [{u'v': u'2'}, {u'v': u'1598' }、{u'v': u'2kinghenryiv'}]}]、u'jobReference': {u'projectId': u'1039435439624'、u'jobId': u'job_ffb30cfb23674f88aa5cb497e358ec05'}、u'jobComplete': True , u'totalRows': u'9', u'schema': {u'fields': [{u'type': u'INTEGER', u'name': u'sum_for_the', u'mode': u 'NULLABLE'}, {u'type': u'INTEGER', u'name': u'corpus_date', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'名前':u'f0_', u'mode': u'NULLABLE'}]}}

以下のPythonコードを使用してこれをループします

resp = []
for row in listReply['rows']:
  for key,dict_list in row.iteritems():
    count = dict_list[0]
    year = dict_list[1]
    corpus = dict_list[2]
    resp.append({'count': count['v'],'year':year['v'],'corpus':corpus['v']})

listReply['rows']以下のようなjson応答の場合のように、これが存在するかどうかを確認する方法

{u'totalRows': u'0', u'kind': u'bigquery#queryResponse', u'jobComplete': True, u'jobReference': {u'projectId': u'1039435439624', u'jobId' : u'job_8efc645852c34515bcff4ab3969772fd'}, u'schema': {u'fields': [{u'type': u'INTEGER', u'name': u'sum_for_the', u'mode': u'NULLABLE'} , {u'type': u'INTEGER', u'name': u'corpus_date', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'name': u 'f0_', u'mode': u'NULLABLE'}]}}

4

3 に答える 3

4
for row in listReply.get('rows', []):

listReply にキー "rows" がある場合、これは対応する値を反復処理します。キーが存在しない場合、デフォルトが返されます。この場合は空のリストである必要があり、反復可能であるためfor文句を言うことはありません。

もう 1 つの方法は、for ループに入る前にキーをテストすることです。

if 'rows' in listReply:
    for row in listReply['rows']:
        ...
于 2012-11-27T19:08:36.883 に答える
3

使用できます

if key in aDict:
  # Operations

Python 辞書にエントリが存在するかどうかをテストします。空のリストになる場合は、次のこともできます。

if key in aDict and aDict[key]:
  # Operations

評価は左から右に行われるため、キーが欠落している場合、2 番目のチェックは実行されませんが、存在して空の場合、2 番目のチェックは操作をスキップします。

于 2012-11-27T19:05:09.733 に答える
0

キーが存在するかどうかを確認するには、キーワードをdict使用します。in

>>> d = {}
>>> 1 in d
16: False
>>> d[1] = 1
>>> 1 in d
17: True
>>> d
18: {1: 1}

あなたの例を使用するには

>>> d = {u'totalRows': u'0', u'kind': u'bigquery#queryResponse', u'jobComplete': True, u'jobReference': {u'projectId': u'1039435439624', u'jobId': u'job_8efc645852c34515bcff4ab3969772fd'}, u'schema': {u'fields': [{u'type': u'INTEGER', u'name': u'sum_for_the', u'mode': u'NULLABLE'}, {u'type': u'INTEGER', u'name': u'corpus_date', u'mode': u'NULLABLE'}, {u'type': u'STRING', u'name': u'f0_', u'mode': u'NULLABLE'}]}}
>>> 'rows' in d
19: False
于 2012-11-27T19:18:51.493 に答える