如果密钥可用,则在列表解析中查找嵌套Dict中的键值

时间:2017-10-18 18:59:55

标签: python list dictionary nested list-comprehension

我正在使用列表推导来查找嵌套字典,以查找某些字典中出现的键“flow”的值,但不是全部(在“DE”和“CH”中,而不是“FR”中)。如果它不存在,它应该跳过这个词典并转到下一个词典。

我的数据:

dict_country_data = 
    {"DE":
    {
        "location":
            "europe",
        "country_code":
            "DE",
        "color":
            {"body": 37647, "wheels": 37863},
        "size":
            {"extras": 40138},
        "flow":
            {"abc": 3845, "cdf": 3844}
    },
    "FR":
        {"location": "europe",
         "country_code": "FR",
         "color":
             {"body": 219107, "wheels": 39197},
         "size":
             {"extras": 3520}
         },
    "CH":
        {"location": "europe",
         "country_code": "CH",
         "color": {"wheels": 39918},
         "size":
             {"extras": 206275},
         "flow":
             {"klm": 799, "sas": 810}
         }
} 

我的尝试:

[dict_country_data[k]["flow"].values() if dict_country_data[k]["flow"].keys() else None for k,v in dict_country_data.items()] 

然而,尽管if-Statement,Python引发了NamError(NameError:name'flow'未定义)。

我渴望的输出:

[3845, 3844, 799, 810]

感谢您的耐心和乐于助人。

2 个答案:

答案 0 :(得分:1)

通常的方式来平息'像这样是嵌套的理解:

[v for country, data in dict_country_data.items() for v in data['flow'].values()]

答案 1 :(得分:0)

您没有获得NameError,而是KeyError,因为您尝试访问每个条目的密钥"flow"。 不要将所有内容放在一个列表中,而是使用for - 循环,它更具可读性:

flows = []
for data in dict_country_data.values():
    if "flow" in data:
        flows.extend(data["flow"].values())