Python如何从嵌套字典中筛选value为负数的unit对应条目
嵌套字典过滤负数value条目实现方案
原有代码核心问题
- 负数判断逻辑不可靠:仅判断字符串包含
-,遇到含破折号的非数字串、正数字符串带-后缀等异常场景会出现误判,无法适配合法数值的通用识别 - 列表修改逻辑错误:未清理原列表中不符合要求的条目,仅追加最后一次匹配到的符合条件的条目,最终结果会保留错误数据
正确实现
版本1:直观循环写法(适配需要额外异常处理、自定义逻辑的场景)
dic = { 'a': [{'unit': 'x', 'value': '1', 'type':'int'},{'unit': '19', 'value':'-1', 'input':'man'},{'unit': 'y', 'value':'-2'}], 'b': [{'unit':'b', 'value': '3', 'type':'int'},{'unit': 'g', 'value':'3'},{'unit': 'tol', 'value':'-12'}] } for k in dic: filtered_items = [] for item in dic[k]: try: # 转为浮点型兼容整数、小数负数判断,确定都是整数可替换为int() if float(item['value']) < 0: filtered_items.append(item) except ValueError: # 非合法数值的条目可按需求调整处理逻辑,此处默认跳过 continue dic[k] = filtered_items
版本2:简洁推导式写法(无特殊处理需求时优先使用)
dic = { k: [item for item in v if float(item['value']) < 0] for k, v in dic.items() }
运行结果
执行后dic的输出和你预期的结果完全一致:
{'a': [{'unit': '19', 'value': '-1', 'input': 'man'}, {'unit': 'y', 'value': '-2'}], 'b': [{'unit': 'tol', 'value': '-12'}]}
内容的提问来源于stack exchange,提问作者an10b3
相关产品推荐
相关产品推荐

