Python遍历嵌套列表 按扫描物料编号匹配返回对应规格参数
Python 物料编号检索实现方案
直接上可运行的实现代码,适配你给出的嵌套列表数据结构和输出要求:
# 原始物料数据集 material_data = [ ["16W1509462 ", " FR-CHJAV-VSDB4234HL ", 30.5, 42.0, 0.75, "JAVA "], ["16W1509463 ", " FR-CHJAV-BT-VSDB4234HL ", 30.5, 42.0, 0.75, "JAVA "], ["16W1509463 ", " FR-CHJAV-BT-VSDB4234HL ", 30.5, 42.0, 0.75, "JAVA "], ["16W1509473 ", " FR-CHJAV-BT-VSDB4234HR ", 30.5, 42.0, 0.75, "JAVA "], ["16W1509473 ", " FR-CHJAV-BT-VSDB4234HR ", 30.5, 42.0, 0.75, "JAVA "], ["16W1509481 ", " FR-CHJAV-VSDB4834HD ", 30.5, 48.0, 0.75, "JAVA "], ["16W1509481 ", " FR-CHJAV-VSDB4834HD ", 30.5, 48.0, 0.75, "JAVA "], ["16W1509503 ", " FR-CHJAV-BT-VSDB6034HD ", 30.5, 60.0, 0.75, "JAVA "], ["16W1509503 ", " FR-CHJAV-BT-VSDB6034HD ", 30.5, 60.0, 0.75, "JAVA "] ] # 数据预处理:清除所有字符串字段前后冗余空格,避免空格导致匹配失败 cleaned_data = [] for item in material_data: cleaned_item = [] for field in item: cleaned_item.append(field.strip() if isinstance(field, str) else field) cleaned_data.append(cleaned_item) def search_material(scanned_code: str): scanned_code = scanned_code.strip() # 输出固定头部 print("<hr />") print(f"<p>Item scanned: {scanned_code}</p>") # 去重标记,避免重复条目多次输出 output_record = set() for mat in cleaned_data: if mat[0] == scanned_code: mat_key = tuple(mat) if mat_key not in output_record: mat_info = " , ".join(str(field) for field in mat) print(f"<p>{mat_info}</p>") output_record.add(mat_key) # 业务调用示例 if __name__ == "__main__": # 实际使用时将下方变量替换为扫码枪获取的物料编号即可 scanned_item_code = "16W1509462" search_material(scanned_item_code)
关键说明
- 预处理步骤是生产环境必须加的:原始数据的字符串字段带大量前后空格,扫码枪输出的编号一般不带冗余空格,不做清洗会出现匹配不到的问题
- 内置了重复条目去重逻辑:示例数据中同个物料存在多条重复记录,不会重复打印相同信息
- 输出格式完全匹配要求,运行上述测试代码的输出结果如下:
<hr /> <p>Item scanned: 16W1509462</p> <p>16W1509462 , FR-CHJAV-VSDB4234HL , 30.5 , 42.0 , 0.75 , JAVA</p>
- 如果需要处理编号不存在的场景,只要在函数末尾判断
output_record是否为空,为空时打印对应提示即可。
内容的提问来源于stack exchange,提问作者Lantz
相关产品推荐
相关产品推荐

