如何将含异常项的列表转为字典并合并同键值?(无模块导入)
解决方案
没问题,我帮你搞定这个字典求和的问题,顺便处理掉列表里那些烦人的脏数据(空字符串、首尾空格、无对应值的条目)!
原代码的问题分析
你的原代码有几个核心问题:
- 没有处理数据里的空白字符(换行符
\n、首尾空格),导致键和值都带脏数据; - 遇到重复键时直接覆盖旧值,而不是累加求和;
- 没处理空字符串和无对应值的条目,这些会导致报错或者无效数据。
修正后的代码(无需导入任何模块)
users_lst = [' spotify: 50.4\n', 'pandora: 23.4\n', 'pandora: 22.1\n', '\n', 'applemusic: \n'] users = {} for item in users_lst: # 第一步:去除当前条目的首尾空白(包括换行、空格),处理后为空则直接跳过 cleaned_item = item.strip() if not cleaned_item: continue # 第二步:分割键和值,再分别去除各自的首尾空格 key_part, value_part = cleaned_item.split(':') key = key_part.strip() value_str = value_part.strip() # 第三步:如果值为空(比如applemusic那条),直接跳过 if not value_str: continue # 第四步:把值转换成浮点数,然后处理累加逻辑 value = float(value_str) if key in users: users[key] += value # 键已存在,累加值 else: users[key] = value # 键不存在,初始化赋值 print(users) # 输出: {'spotify': 50.4, 'pandora': 45.5}
代码关键点说明
strip():用来清除字符串首尾的所有空白字符(包括\n、空格、制表符等),完美解决脏数据问题;- 空条目判断:处理后为空的字符串直接跳过,避免无效数据干扰;
- 累加逻辑:通过判断键是否存在于字典中,选择累加或初始化赋值,实现同键值求和;
- 类型转换:把字符串格式的数值转成浮点数,确保能正确进行数学运算。
内容的提问来源于stack exchange,提问作者CodeMonkey
相关产品推荐
相关产品推荐

