这是我的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':是的,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'f0_',你'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':你' NULLABLE'},{u'type':u'INTEGER',u'name':u'corpus_date',u'mode':u'NULLABLE'},{u'type':u'STRING',你的名字':u'f0_',u'mode':'u'NULLABLE'}]}}
答案 0 :(得分:4)
for row in listReply.get('rows', []):
如果listReply有一个键“rows”,这将迭代相应的值。如果密钥不存在,则返回默认值,在这种情况下应该是空列表,因此for
不会抱怨,因为它是可迭代的。
另一种方法是在进入for循环之前测试密钥。
if 'rows' in listReply:
for row in listReply['rows']:
...
答案 1 :(得分:3)
您可以使用
if key in aDict:
# Operations
测试python词典中是否存在条目。如果它是一个空列表,你也可以这样做:
if key in aDict and aDict[key]:
# Operations
由于评估是从左到右,如果缺少密钥,则不会执行第二次检查,但如果它存在且为空,则第二次检查将跳过操作。
答案 2 :(得分: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