Python实现两列表合并匹配,忽略lst2键末尾下划线的方法
实现方案
你可以先对lst2子列表的首元素做末尾下划线去除预处理,匹配成功后替换为lst1中的标准无下划线字段,再按原有逻辑排序即可,参考实现如下:
lst3 = sorted( [ [std_key, item[1]] for item in lst2 if (std_key := item[0].removesuffix('_')) in lst1 ], key=lambda x: lst1.index(x[0]) )
如果使用的Python版本低于3.9(不支持removesuffix语法),可以替换为兼容写法:
lst3 = sorted( [ [std_key, item[1]] for item in lst2 for std_key in [item[0][:-1] if item[0].endswith('_') else item[0]] if std_key in lst1 ], key=lambda x: lst1.index(x[0]) )
逻辑说明
- 遍历
lst2的每个子项时,先对首元素做末尾单个下划线的裁剪,得到待匹配的标准键std_key - 如果
std_key存在于lst1中,就用该标准键替换原首元素,保留值构造新的子项 - 最后按
lst1的字段顺序排序,和原有逻辑完全对齐
如果你的场景允许首元素末尾存在多个下划线,需要全部裁剪后匹配,把removesuffix('_')替换为rstrip('_')即可。
内容的提问来源于stack exchange,提问作者seyev15735
相关产品推荐
相关产品推荐

