Python嵌套字典:筛选子字典字段符合条件的顶层键
Python嵌套字典筛选时返回符合条件的顶层键
问题场景
给定如下嵌套字典结构:
nested = { "Moli": { "Buy": 75, "Sell": 53, "Quantity": 300, "TF": True}, "Anna": { "Buy": 55, "Sell": 83, "Quantity": 154, "TF": False}, "Bob": { "Buy": 25, "Sell": 33, "Quantity": 100, "TF": False}, "Annie": { "Buy": 74, "Sell": 83, "Quantity": 96, "TF": True} }
现有筛选代码如下:
subset = [d for d in nested.values() if d['TF'] == False]
这段代码运行后返回的是2个符合条件的子字典组成的列表,不符合需求。预期要得到TF字段为False对应的顶层键名称列表,即输出["Anna" , "Bob"],需要实现筛选时直接获取字典键而非对应值。
解决方法
问题出在遍历逻辑上:nested.values()只会迭代字典所有顶层键对应的值,自然拿不到顶层键名。
要同时拿到键和对应的值做条件判断,直接迭代字典的items()方法即可——该方法每次迭代返回(顶层键, 对应值)的元组,判断逻辑不变,满足条件时返回键名就可以得到目标结果:
subset = [name for name, detail in nested.items() if detail['TF'] == False]
运行上述代码,subset的结果就是预期的["Anna", "Bob"]。
小提示:因为TF字段本身是布尔类型,判断时可以省略== False的写法,直接用if not detail['TF'],写法更简洁,运行效果完全一致。
内容的提问来源于stack exchange,提问作者Alex Kfoury
相关产品推荐
相关产品推荐

