如何将Excel行数据列表解包赋值给类实例列表的元素?
问题解决:列表解包赋值给类实例列表元素的语法错误
错误原因
你写的properList[0] = (*testList)是非法语法,Python不允许直接将星号解包的表达式作为单个值赋值给变量。星号解包仅能用于特定场景,比如函数调用参数、列表/元组字面量(如[*testList])或多变量赋值中,不能单独作为赋值对象。
解决方案
根据你的需求,分两种场景处理:
1. 替换列表中的元素为新的rowData实例
和你创建单个实例的逻辑一致,调用rowData(*testList)生成新实例后,再赋值给列表元素:
testList = createListforRow(2) properList[0] = rowData(*testList)
这样就能把properList的第0个元素替换为用testList解包创建的rowData实例,完全匹配你之前成功创建单个实例的逻辑。
2. 更新现有rowData实例的属性(不替换实例)
如果不想替换列表里的原有实例,只想更新它的所有属性,可以通过遍历属性名和testList元素来批量赋值:
testList = createListforRow(2) # 按rowData初始化参数的顺序定义属性名列表 attr_names = [ 'segment', 'country', 'product', 'discountBand', 'unitsSold', 'manufacturingPrice', 'salePrice', 'grossSales', 'discounts', 'sales', 'COGS', 'profit', 'date', 'monthNumber', 'monthName', 'year' ] # 获取要更新的实例 target_instance = properList[0] # 一一对应赋值属性 for name, value in zip(attr_names, testList): setattr(target_instance, name, value)
这种方式会保留原有实例对象,仅更新它的所有属性值。
额外优化建议
你可以用列表推导式简化createListforRow函数,让代码更简洁:
def createListforRow(i): return [str(cell.value) for cell in sheet[i]]
内容的提问来源于stack exchange,提问作者mrod520
相关产品推荐
相关产品推荐

