Python基于多维列表构建用户-POI ID字典时出现'list' object has no attribute 'strip'错误的解决咨询
解决List对象无strip属性错误并构建目标字典
这个报错的原因很明确:你的train_list里的每一项是列表类型(比如[0, 1, 28]),而不是字符串,所以根本不能调用strip()和split()方法——这就是"'list' object has no attribute 'strip'"错误的来源。
你已经通过DataFrame把数据转换成了结构化的列表,不需要再做字符串拆分操作,直接从列表里解包元素就行。另外注意你代码里还存在一个小问题:定义的变量是trainset,但后面用了ground_truth,这也会导致未定义的错误,一起修正掉。
正确的实现代码
from collections import defaultdict trainset = defaultdict(set) # 创建键对应集合的默认字典 for eachline in train_list: uid, lid, _ = eachline # 直接解包列表中的三个元素,忽略第三个checkinnumber trainset[uid].add(lid)
不用defaultdict的替代写法
如果你不想依赖collections.defaultdict,也可以用普通字典手动处理不存在的键:
trainset = {} for eachline in train_list: uid, lid, _ = eachline # 如果当前用户id不在字典中,先初始化一个空集合 if uid not in trainset: trainset[uid] = set() trainset[uid].add(lid)
运行之后,trainset就会变成你想要的结构:{0: {1,2,6,7}, 1: {130,131,132,134}, 2: {441,202,98,99}, ...}。
内容的提问来源于stack exchange,提问作者drorhun
相关产品推荐
相关产品推荐

