我正在使用列表推导来查找嵌套字典,以查找某些字典中出现的键“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]
感谢您的耐心和乐于助人。
答案 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())