Python字典负值转正操作未生效,如何正确修改?
问题原因
你遍历字典values()时拿到的value是原字典值的副本,不是指向原元素的引用——修改这个局部变量value只会改变它自己的值,根本碰不到字典里的原始数据,所以字典里的负值自然没变化。
解决方案
给你两种实用的修改方式:
方法1:遍历字典的键,直接通过键修改值
遍历字典的键,用键去访问并修改字典里的对应元素,这样就能直接改动原字典的数据:
for key in all_variables['Input Parameter']: value = all_variables['Input Parameter'][key] # 同时匹配整数和浮点数,判断为负就取反 if isinstance(value, (int, float)) and value < 0: all_variables['Input Parameter'][key] = -value
方法2:用字典推导式生成新字典(覆盖原字典)
如果不需要保留原字典的其他关联引用,可以直接生成一个所有值为正数的新字典,再赋值回原位置:
all_variables['Input Parameter'] = { key: -value if isinstance(value, (int, float)) and value < 0 else value for key, value in all_variables['Input Parameter'].items() }
额外简化技巧
其实不用判断正负,直接用abs()函数取绝对值更省事,不管原数是正还是负,直接转成正数:
# 方法1简化版 for key in all_variables['Input Parameter']: value = all_variables['Input Parameter'][key] if isinstance(value, (int, float)): all_variables['Input Parameter'][key] = abs(value) # 方法2简化版 all_variables['Input Parameter'] = { key: abs(value) if isinstance(value, (int, float)) else value for key, value in all_variables['Input Parameter'].items() }
内容的提问来源于stack exchange,提问作者imky
相关产品推荐
相关产品推荐

