[英]Multiple FOR loops in iterating over dictionary in Python
这是由我处理的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,另一个存储“参数”)或从此原始字典简化的字典。 有没有办法使用iteritem()方法使用带有kay,value对的嵌套for循环来做到这一点?
我到目前为止尝试过的是:
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循环起作用的麻烦。 我还没有考虑过退出列表。
我认为这可能是总体上很愚蠢的方法,但是我还看不到它。
我认为您可以通过在可行的情况下仅通过建立索引而不是遍历iteritems
来使代码更简单。
for site in WS_Req_dict['queryInfo']['data']['sites']:
queryDict[site['id']] = site['params']
如果某些键可能丢失,那么dict
的get
方法是您的朋友:
for site in WS_Req_dict.get('queryInfo',{}).get('data',{}).get('sites',[]):
让您安静地忽略丢失的键。 但是,它的可读性差很多,因此,如果我需要它,我会将其封装到一个函数中-而且通常您可能不需要这种级别的预防措施! (另一个不错的选择是try/except KeyError
封装,如果确实在您的特定用例中可能会丢失密钥,则可以忽略它们)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.