Python CSV处理:已知X、Y列取值如何查询对应Z列的单元格值
实现方案
方法1:单次查询直接遍历(适合查询次数少的场景)
直接遍历嵌套列表的每一行数据,匹配X、Y列的取值,匹配成功直接返回对应Z列值。
假设你的嵌套列表结构为:第一行为表头,后续行是数据,示例代码如下:
# 示例嵌套列表数据 csv_data = [ ['X;', 'Y;', 'Z'], ['A;', '1;', 'syfgusj'], ['A;', '2;', 'adaddsfd'], ['B;', '1;', 'adsghfjgftrds'], ['B;', '2m;', 'adergtw'], ['C;', '1;', 'adergtw'], ['C;', '2;', 'addfgftre'] ] def query_z(x_val, y_val, data): # 跳过表头,从第二行开始遍历 for row in data[1:]: # 行的第0位是X列,第1位是Y列,第2位是Z列 if row[0] == x_val and row[1] == y_val: return row[2] # 没有匹配结果返回None return None # 测试查询:X为B;,Y为2m; print(query_z('B;', '2m;', csv_data)) # 输出:adergtw
注意:如果你的数据已经提前去掉了字段末尾的分号,匹配的时候对应去掉查询值的分号即可。另外Y列取值为字符串类型,匹配时不需要做类型转换,直接比对字符串内容即可,避免类型不匹配导致查询失败。
方法2:预建索引映射(适合多次查询的场景)
如果需要频繁查询,先把所有X、Y组合和对应Z值存成字典,后续查询时间复杂度为O(1),效率更高。示例代码如下:
# 预构建索引 def build_index(data): index = {} for row in data[1:]: key = (row[0], row[1]) index[key] = row[2] return index # 构建索引 csv_index = build_index(csv_data) # 直接查询 print(csv_index.get(('C;', '2;'))) # 输出:addfgftre
如果存在X、Y组合重复的情况,上面的代码会保留最后一行的Z值,如果你需要保留所有匹配结果,可以把字典的值改成列表,每次匹配就追加值即可。
内容的提问来源于stack exchange,提问作者Nothing Happen
相关产品推荐
相关产品推荐

