如何在Fit_Collection字典类中向列表添加Fit对象
问题解决:将Fit实例存入列表而非覆盖字典值
当前代码的问题在于Fit_Collection的fit方法每次直接用新的Fit实例覆盖对应项目的字典值,导致每个项目最终只保留最后一个实例。要实现每个项目对应一个Fit实例列表,只需修改fit方法的逻辑:
class Fit_Collection(dict): def __init__(self, *args, **kwargs): super(Fit_Collection, self).__init__(*args, **kwargs) def fit(self, *args, **kwargs): f = Fit(*args, **kwargs) # 检查项目是否已存在,不存在则初始化空列表 if f.project_name not in self: self[f.project_name] = [] # 将新的Fit实例追加到列表中 self[f.project_name].append(f) return f class Fit(object): def __init__(self, name, project_name): self.name = name self.project_name = project_name project1 = ["fit1", "fit2", "fit3"] project2 = ["fit11", "fit22"] dictionary = Fit_Collection() for item in project1: dictionary.fit(item, "project1") for item in project2: dictionary.fit(item, "project2") print(dictionary)
修改说明
- 新增键存在性检查:当添加新的Fit实例时,先判断对应项目是否已在字典中,若不存在则创建空列表作为该键的初始值
- 替换赋值为追加操作:不再直接用
self[f.project_name] = f覆盖值,而是用append将新实例添加到列表末尾,这样每个项目会累积所有对应的Fit实例
内容的提问来源于stack exchange,提问作者user16613865
相关产品推荐
相关产品推荐

