如何按条件为Python嵌套字典的子字典添加新键值对并解决报错?
问题原因分析
你遇到的报错和功能不生效问题来自三个代码错误:
- 报错
TypeError: 'dict' object is not callable的直接原因是你写了info_processos(value["dias_vista"] >= 10),圆括号()在Python里是调用可执行对象(比如函数)的语法,字典属于不可调用对象,取值要使用方括号[];而且你的判断逻辑不需要套外层字典,直接判断子字典的dias_vista值即可。 - 你没有给分支加
else,不管if判断是否成立,最后一行prorrogado": "Não"的赋值都会执行,直接覆盖if分支的赋值结果。 - 你使用
update直接给协议号对应的value替换为只包含prorrogado的新字典,会丢失原来子字典里的classe、dias_vista两个字段。
正确实现代码
因为字典是可变对象,直接遍历修改子字典的键值对即可,不需要修改外层字典:
info_processos = { '2019.491429': {"classe": "apelação", "dias_vista": 11}, '2020.714034': {"classe": "habeas corpus", "dias_vista": 8}, '2015.695102': {"classe": "agravo de instrumento", "dias_vista": 17}, '2012.628045': {"classe": "apelação", "dias_vista": 32}, '2017.462447': {"classe": "recurso em sentido estrito", "dias_vista": 9}, '2018.518281': {"classe": "apelação", "dias_vista": 4}, } # 遍历所有子字典直接赋值 for sub_dict in info_processos.values(): sub_dict["prorrogado"] = "sim" if sub_dict["dias_vista"] >= 10 else "não"
运行后打印info_processos就可以看到所有子字典都已经正确添加了prorrogado字段,原有字段不会丢失。
内容的提问来源于stack exchange,提问作者Gabriel Salvador
相关产品推荐
相关产品推荐

