匹配列表与表格列值:为Excel首列各元素生成对应次列值列表
原表格示意图:
错误原因
你得到空列表的核心问题出在第二部分代码的判断条件:
你写的是if ws11.cell(row=j, column=1).column == values[i-1]:,这里的.column属性返回的是单元格的列序号,这里你固定取的是第一列,所以该值永远为1,只有当你第一列的元素刚好是数字1时才可能匹配成功,其余情况判断永远不成立,自然不会有元素被追加到列表中。同时你现有逻辑会把所有匹配到的值都存在同一个一维列表里,无法区分不同第一列元素对应的结果。
修正方案
1. 基于你原有逻辑修正
把判断条件中的.column改为.value即可,同时调整为字典存储结果,更符合你要的「第一列元素对应第二列值列表」的需求:
# 提取第一列唯一值的逻辑可保留 values = [] for i in range(2, ws11.max_row+1): cell_val = ws11.cell(row=i, column=1).value if cell_val not in values: values.append(cell_val) print(values) # 修正后生成对应映射关系 result = {} for key in values: result[key] = [] for j in range(2, ws11.max_row+1): # 这里将.column改为.value,同时注意两边值的类型要匹配 if ws11.cell(row=j, column=1).value == key: result[key].append(ws11.cell(row=j, column=2).value) print(result)
2. 更高效的简化写法
无需单独遍历一遍提取唯一值,只需要遍历一次表格即可生成结果,性能更好:
result = {} for i in range(2, ws11.max_row+1): key = ws11.cell(row=i, column=1).value val = ws11.cell(row=i, column=2).value if key not in result: result[key] = [] result[key].append(val) print(result)
运行后result中就会存储你需要的结构,比如result[1]就会返回['a','g'],result[2]返回['r','t']。
内容的提问来源于stack exchange,提问作者Iuli
相关产品推荐
相关产品推荐

