繁体   English   中英

在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个站点,其参数集未知。 我的目标是创建两个列表(一个存储“站点” 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']

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

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

让您安静地忽略丢失的键。 但是,它的可读性差很多,因此,如果我需要它,我会将其封装到一个函数中-而且通常您可能不需要这种级别的预防措施! (另一个不错的选择是try/except KeyError封装,如果确实在您的特定用例中可能会丢失密钥,则可以忽略它们)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM