如何保留含指定关键词的嵌套子列表?正则实现求助
筛选嵌套列表中含特定关键词的子列表
问题描述
我通过for循环生成了一个嵌套列表,结构如下:
[['8.761,00', '67.512,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['', '', '', '', ''], ['Anno 2016 Reddito Prof.le', 'Vol. Affari 4% Vo', 'l. Affari 2%', '', ''], ['9.263,00', '85.149,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00'], ['', '', '', '', '']]
需要仅保留包含Soggettivo、Integrativo、Maternità、Interessi、Sanzioni、Totale、Totale Contributi关键词的子列表,删除所有其他子列表(比如空列表、含年份的列表等)。由于子列表索引不固定,无法通过索引删除,尝试正则未成功,求解决方法。
期望最终结果:
[['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00']]
解决方案
不需要用正则,直接通过字符串包含判断+列表推导式就能快速筛选,代码如下:
original_list = [['8.761,00', '67.512,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 15%', '1.314,15', '1.314,15', '0,00', '0,00'], ['Integrativo 4%', '2.700,48', '2.700,48', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '113,20', '113,20', '0,00', '0,00'], ['Totale Contributi', '4.127,83', '4.127,83', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.127,83', '4.127,83', '0,00', '0,00'], ['', '', '', '', ''], ['Anno 2016 Reddito Prof.le', 'Vol. Affari 4% Vo', 'l. Affari 2%', '', ''], ['9.263,00', '85.149,00', '0,00', '', ''], [None, '', '', '', ''], ['', 'Dovuto', 'Pagato', 'Rimborsato', 'Debito/Credito'], ['Soggettivo 16%', '1.482,08', '1.482,08', '0,00', '0,00'], ['Integrativo 4%', '3.405,96', '3.405,96', '0,00', '0,00'], ['Integrativo 2%', '0,00', '0,00', '0,00', '0,00'], ['Maternità', '110,29', '110,29', '0,00', '0,00'], ['Totale Contributi', '4.998,33', '4.998,33', '0,00', '0,00'], ['Interessi', '0,00', '0,00', '0,00', '0,00'], ['Sanzioni', '0,00', '0,00', '0,00', '0,00'], ['Totale', '4.998,33', '4.998,33', '0,00', '0,00'], ['', '', '', '', '']] # 定义需要保留的关键词集合 keep_keywords = {'Soggettivo', 'Integrativo', 'Maternità', 'Interessi', 'Sanzioni', 'Totale', 'Totale Contributi'} # 筛选子列表:先排除第一个元素非字符串的情况,再检查是否包含目标关键词 filtered_list = [ sublist for sublist in original_list if isinstance(sublist[0], str) and any(keyword in sublist[0] for keyword in keep_keywords) ] print(filtered_list)
代码说明
- 关键词集合:用集合存储目标关键词,提升判断效率。
- 列表推导式筛选:
- 先判断子列表的第一个元素是否为字符串,直接排除包含
None或空字符串开头的无效子列表。 - 再检查该字符串是否包含任一目标关键词,满足条件的子列表会被保留。
- 先判断子列表的第一个元素是否为字符串,直接排除包含
运行这段代码就能得到你需要的最终列表。
内容的提问来源于stack exchange,提问作者deidei
相关产品推荐
相关产品推荐

