如何拆分字典中含数字字母的取值并运算后更新字典
解决方案:处理带单位的字典值并更新
核心思路
通过正则表达式精准拆分字符串中的数字部分与单位字母,完成数值计算后重新拼接,最终更新原字典。以下是可直接运行的代码实现:
单键处理示例
import re def update_dict_entry(target_dict, key, user_input): original_val = target_dict.get(key) if not original_val: return # 匹配数字(含小数)和字母单位的正则表达式 pattern_match = re.match(r'([\d.]+)([a-zA-Z]+)', original_val) if not pattern_match: return num_str, unit = pattern_match.groups() current_num = float(num_str) added_num = float(user_input) new_num = current_num + added_num # 更新字典 target_dict[key] = f"{new_num}{unit}" # 测试示例 user_has = {'water': '16oz'} user_input = input("请输入要添加的数值:") update_dict_entry(user_has, 'water', user_input) print(user_has) # 输入1.3后输出:{'water': '17.3oz'}
批量处理所有符合格式的键
如果需要一次性处理字典中所有带数字+字母格式的键,可以用下面的函数:
import re def update_all_dict_entries(target_dict, user_input): try: added_num = float(user_input) except ValueError: print("输入不是有效数值,请重新输入") return for key, val in target_dict.items(): pattern_match = re.match(r'([\d.]+)([a-zA-Z]+)', val) if pattern_match: num_str, unit = pattern_match.groups() current_num = float(num_str) new_num = current_num + added_num target_dict[key] = f"{new_num}{unit}" # 测试示例 user_has = {'water': '16oz', 'milk': '250ml', 'apple': '3'} user_input = input("请输入要添加的数值:") update_all_dict_entries(user_has, user_input) print(user_has)
关键细节说明
- 正则表达式
r'([\d.]+)([a-zA-Z]+)':第一个分组匹配所有数字和小数点,第二个分组匹配所有英文字母单位,确保精准拆分。 - 异常处理:批量处理时增加了输入值的格式校验,避免非数值输入导致报错。
- 边界情况:键不存在、值不符合数字+字母格式时,函数会直接跳过,不会破坏原字典数据。
内容的提问来源于stack exchange,提问作者Bobolinger87
相关产品推荐
相关产品推荐

