在 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']

如果某些键可能丢失,dictget 方法是你的朋友:

for site in WS_Req_dict.get('queryInfo',{}).get('data',{}).get('sites',[]):

会让你安静地忽略丢失的钥匙。但是,这可读性要差得多,所以,如果我需要它,我会把它封装到一个函数中——通常你可能不需要这种级别的预防措施! (另一个不错的选择是 try/except KeyError 封装以忽略丢失的键,如果它们在您的特定用例中确实可行的话)。