这是一个由json.load创建的字典的简单示例,我无处理:
{
"name": "USGS REST Services Query",
"queryInfo": {
"timePeriod": "PT4H",
"format": "json",
"data": {
"sites": [{
"id": "03198000",
"params": "[00060, 00065]"
},
{
"id": "03195000",
"params": "[00060, 00065]"
}]
}
}
}
有时每个站点可能有15到100个具有未知参数集的站点。我的目标是创建两个列表(一个存储"站点" ID,另一个存储" params")或者来自这个原始字典的简化字典。有没有办法使用嵌套for循环使用kay,值对使用iteritem()方法?
我尝试过的是:
queryDict = {}
for key,value in WS_Req_dict.iteritems():
if key == "queryInfo":
if value == "data":
for key, value in WS_Req_dict[key][value].iteritems():
if key == "sites":
siteVal = key
if value == "params":
paramList = [value]
queryDict["sites"] = siteVal
queryDict["sites"]["params"] = paramList
我遇到麻烦让第二个FOR循环起作用。我还没有考虑过拔出名单。
我认为这可能是一种全面的愚蠢方式,但我还不能看到它。
答案 0 :(得分:1)
我认为,只要在可行的情况下编制索引,而不是循环遍历iteritems
,就可以使代码更简单。
for site in WS_Req_dict['queryInfo']['data']['sites']:
queryDict[site['id']] = site['params']
如果某些密钥可能丢失,dict
的{{1}}方法是您的朋友:
get
会让你静静地忽略丢失的密钥。但是,这个可读性要低得多,因此,如果我需要它,我会将其封装到一个函数中 - 通常你可能不需要这种级别的预防措施! (另一个好的选择是for site in WS_Req_dict.get('queryInfo',{}).get('data',{}).get('sites',[]):
封装,以忽略丢失的密钥,如果它们确实可能在您的特定用例中。)