在 Python 中遍历字典的多个 FOR 循环
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 个站点,每个站点的参数集未知。我的目标是创建两个列表(一个存储 "site" ID,另一个存储 "params")或从这个原始字典创建一个大大简化的字典。有没有一种方法可以使用 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
封装以忽略丢失的键,如果它们在您的特定用例中确实可行的话)。
这是一个简单的字典示例,由 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 个站点,每个站点的参数集未知。我的目标是创建两个列表(一个存储 "site" ID,另一个存储 "params")或从这个原始字典创建一个大大简化的字典。有没有一种方法可以使用 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
封装以忽略丢失的键,如果它们在您的特定用例中确实可行的话)。