如何删除列表中Folder键值含指定关键词的字典?
问题分析
你的代码存在两个核心问题:
- 遍历列表时直接修改原列表:遍历过程中调用
input_dict.remove(data_dict)会改变列表长度,导致迭代器跳过部分元素,无法完整检查所有字典。 - 大小写敏感的匹配:关键词
"Feature image"和Folder值里的"Feature Image"大小写不一致,导致原本应该被删除的字典无法被匹配到。
解决方案
采用创建新列表保留符合条件元素的方式,同时统一大小写消除匹配误差:
input_dict = [{'Key': 2296.0, 'Folder': '/Feature Annotated Image Localization/Amazon DE - Feature Image Localization/', 'Parent task': 'Amazon DE - 1019295902: Feature / Annotated Image Localization', 'Default task workflow': ''}, {'Key': 2299.0, 'Folder': '/Feature Annotated Image Localization/Amazon DE', 'Parent task': 'Amazon DE - 1025250536: Feature / Annotated Image Localization', 'Default task workflow': ''}, {'Key': 2300.0, 'Folder': '/Feature Annotated Image Localization/Amazon DE - Feature Image Localization/', 'Parent task': 'Amazon DE - 1025250536: Feature / Annotated Image Localization', 'Default task workflow': ''}, {'Key': 1741.0, 'Folder': '/BBY US RDX/', 'Parent task': 'Best Buy US RDX - 999936599: Syndicated Content Request', 'Default task workflow': '', 'Default project workflow': ''}] keywords = ["RDX","Feature image","Spec sheet"] # 统一转为小写,消除大小写差异 lower_keywords = [kw.lower() for kw in keywords] # 生成新列表,只保留Folder值不包含任何关键词的字典 filtered_list = [] for data_dict in input_dict: folder_value = data_dict.get('Folder', '').lower() if not any(kw in folder_value for kw in lower_keywords): filtered_list.append(data_dict) print(filtered_list)
代码说明
- 先将所有关键词转为小写,同时把每个字典的Folder值也转为小写,确保匹配不受大小写影响。
- 遍历原列表时,将符合保留条件的字典添加到新列表中,避免修改原列表导致的迭代异常。
- 使用
dict.get('Folder', '')处理可能不存在Folder键的情况,避免KeyError。
运行后输出与预期一致:
[{'Key': 2299.0, 'Folder': '/Feature Annotated Image Localization/Amazon DE', 'Parent task': 'Amazon DE - 1025250536: Feature / Annotated Image Localization', 'Default task workflow': ''}]
内容的提问来源于stack exchange,提问作者Kunal Joshi
相关产品推荐
相关产品推荐

