You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拆分字典中含数字字母的取值并运算后更新字典

解决方案:处理带单位的字典值并更新

核心思路

通过正则表达式精准拆分字符串中的数字部分与单位字母,完成数值计算后重新拼接,最终更新原字典。以下是可直接运行的代码实现:

单键处理示例

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 17:43:11