Python如何删除嵌套字典中值为非零的键值对
嵌套字典非零键值对删除实现方案
错误原因
你使用的单层推导式逻辑不匹配嵌套字典的结构,存在两处问题:
- 你的需求是删除内层子字典中值非零的键值对,单层推导式仅能遍历外层字典的键值,无法处理内层的单个键值对
- 你写的判断条件
val.values() != 0.0逻辑不成立,val对应内层子字典,.values()返回的是子字典所有值的可迭代集合,无法直接和单个浮点数0.0做相等判断
正确实现
使用两层嵌套字典推导式,仅保留内层字典中值为0.0的键值对即可:
my_dict = { 'abcdef': {'1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '75609': 1.0, '56565': 2.0, '98656': 3.0, '756095': 0.0, '23432': 0.0}, 'fgrd': {'1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '75609': 1.0, '56565': 2.0, '98656': 3.0, '756095': 0.0, '23432': 0.0} } # 两层推导式处理逻辑 result = { outer_key: { inner_k: inner_v for inner_k, inner_v in inner_dict.items() if inner_v == 0.0 } for outer_key, inner_dict in my_dict.items() }
运行结果
处理后得到的result结构如下,所有值非零的内层键值对已被清除:
{ 'abcdef': { '1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '756095': 0.0, '23432': 0.0 }, 'fgrd': { '1987': 0.0, '0544': 0.0, '0568': 0.0, '3000': 0.0, '7095': 0.0, '756095': 0.0, '23432': 0.0 } }
内容的提问来源于stack exchange,提问作者behappy
相关产品推荐
相关产品推荐

