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不会抱怨,因为它是可迭代的。

另一种方法是在进入 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

因为评估是从左到右的,如果 key 缺失,第二次检查将不会执行,但如果它存在且为空,第二次检查将跳过操作。

于 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 回答