Python将JSON标签数组合并为同键多值字典报错如何解决
报错原因与解决方案
问题定位
- 前置逻辑错误:你调整后的代码第一步就执行了
product['tags'] = dict(s.split('--') for s in t_filtered),该步骤会直接覆盖同键的多个值,后续处理无法获取到被覆盖的原始多值,属于无效逻辑。 - 语法报错原因:Python直接遍历字典时默认仅返回字典的键(单个字符串),你尝试将单个字符串赋值给
k, v两个变量,自然抛出ValueError: too many values to unpack (expected 2)错误,正确遍历字典键值对需要调用.items()方法。
正确实现
无需提前转为字典,直接遍历过滤后的标签列表处理即可,以下两种方案均可实现需求:
方案1:使用setdefault实现(无需导入依赖)
t = product['tags'] t_filtered = [k for k in t if '--' in k] result = {} for item in t_filtered: # 加maxsplit=1避免值本身包含--时拆分错误 key, value = item.split('--', 1) # 若需要格式化sugar的精度为1位小数,可打开下方注释 # if key == 'sugar': # value = f"{float(value):.1f}" result.setdefault(key, []).append(value) product['tags'] = result
方案2:使用collections.defaultdict实现(代码更简洁)
from collections import defaultdict t = product['tags'] t_filtered = [k for k in t if '--' in k] result = defaultdict(list) for item in t_filtered: key, value = item.split('--', 1) result[key].append(value) # 转为普通字典符合输出要求 product['tags'] = dict(result)
内容的提问来源于stack exchange,提问作者mad
相关产品推荐
相关产品推荐

