如何对字符串列表中的电子元器件分类并实现唯一归类?
解决元器件分类去重问题
我来帮你搞定这个元器件分类并去重的需求,直接上可行的Python方案,一步一步来:
思路概述
核心是用字典来存储元器件和对应类别(字典的键天然唯一,刚好解决重复元器件只存一次的问题),然后遍历每个字符串块,识别类别并提取元器件,最后输出整理好的结果。
实现代码
lst = [ 'CAPACITOR\n C500 1u PN"1";\n C501 1u PN"2";\n\nRESISTOR\n R100 10 PN"10";\n R101 10 PN"11";\n', '\nCAPACITOR\n C500 1u PN"1";\n C507 1u PN"2";\n\nCONNECTOR\n TP100 NT;\n TP101 NT;' ] # 初始化字典存储元器件-类别映射,确保唯一 component_map = {} for s in lst: # 按空行分割成不同的类别块 category_blocks = [block.strip() for block in s.split('\n\n') if block.strip()] for block in category_blocks: # 分割类别名和元器件行 lines = block.split('\n') category = lines[0].strip() # 把类别名转成首字母大写,其余小写的格式 formatted_category = category.capitalize() # 处理每个元器件行 for line in lines[1:]: line = line.strip() if not line: continue # 提取元器件编号(行开头的字母+数字部分,直到第一个空格) component_id = line.split()[0] # 只有当元器件不在字典里时才添加,确保只归类一次 if component_id not in component_map: component_map[component_id] = formatted_category # 输出结果 for comp, cat in component_map.items(): print(f"{comp} , {cat}")
运行结果
运行上面的代码后,会得到你想要的输出:
C500 , Capacitor C501 , Capacitor R100 , Resistor R101 , Resistor C507 , Capacitor TP100 , Connector TP101 , Connector
代码细节说明
- 用
split('\n\n')分割每个字符串里的不同类别块,比如把CAPACITOR和RESISTOR的内容分开; - 对每个类别块,先提取第一行作为类别名,转成首字母大写的格式;
- 遍历类别下的每一行元器件,用
split()[0]提取最开头的元器件编号(比如C500、R100); - 字典的
not in判断确保每个元器件只被记录一次,后面重复出现的会被忽略。
内容的提问来源于stack exchange,提问作者mark7378
相关产品推荐
相关产品推荐

