Python列表切片转字典时同键多值存储实现问题求解
问题根因
你的代码无法归集同键对应值的核心原因有两个:
defaultdict初始化参数错误:你需要为每个键存储列表形式的多组值,初始化时应该传入list作为默认值工厂,而非str- 赋值逻辑错误:直接使用
dc[x] = y是全量覆盖键的对应值,无论使用哪种字典类型,这种写法都会替换掉同键下之前存储的所有旧内容,不会自动做归集。
正确实现代码
from collections import defaultdict lst = [ 'Macbook Air - 13inch Model', 'Iphone13 - Max Pro 65GB Model', 'Iphone13 - Max 128GB Model', 'Airpod2' ] # 初始化时指定每个键的默认值为空列表 dc = defaultdict(list) for item in lst: key, *val_parts = item.split('-') # 将当前条目分割出的值部分追加到对应键的列表中,而非直接覆盖 dc[key].extend(val_parts) print(dc)
运行输出
defaultdict(<class 'list'>, {'Macbook Air ': [' 13inch Model'], 'Iphone13 ': [' Max Pro 65GB Model', ' Max 128GB Model'], 'Airpod2': []})
补充说明:你之前给出的预期输出里
Iphone13对应的第二个值漏写了开头的Max片段,属于手误。如果需要清理值前后多余的空格,可以把追加逻辑改成dc[key].extend(part.strip() for part in val_parts),处理后的值就不会带首尾多余空格。
内容的提问来源于stack exchange,提问作者Koji E
相关产品推荐
相关产品推荐

