Python中删除字典内包含指定子串的元素
过滤字典中包含特定关键词的路径值,保留指定文件夹下的路径
没问题,我来帮你搞定这个需求!你想要从字典的每个列表值里删掉包含"Converted"的文件路径,只留下"Submitted"文件夹下的路径,对吧?
先看你的初始代码,你已经正确构建了目标字典,但之前的推导式写法有问题——因为每个值是一个列表,不是单个字符串,所以需要对列表里的每个元素单独过滤。
正确实现代码
首先是你的初始字典:
# 创建空字典 d = dict() # 为每个键添加多个元素 d["key1"] = ["C:/Users/TAS/Documents/Folder/Converted/script.py"] d["key1"].append("C:/Users/TAS/Documents/Folder/Submitted/script.py") d["key2"] = ["C:/Users/TAS/Documents/Folder/Converted/script2.py"] d["key2"].append("C:/Users/TAS/Documents/Folder/Submitted/script2.py")
接下来用嵌套推导式完成过滤:
# 方式1:直接保留包含"Submitted"的路径 filtered_dict = {key: [path for path in paths if "Submitted" in path] for key, paths in d.items()} # 方式2:排除包含"Converted"的路径(效果和方式1一致) filtered_dict = {key: [path for path in paths if "Converted" not in path] for key, paths in d.items()}
代码解释
- 外层是字典推导式,遍历原字典的每一对键值对(
key是键,paths是对应路径列表) - 内层是列表推导式,对每个路径列表逐一检查,只留下符合条件的路径
运行后,filtered_dict的结果会是:
{ "key1": ["C:/Users/TAS/Documents/Folder/Submitted/script.py"], "key2": ["C:/Users/TAS/Documents/Folder/Submitted/script2.py"] }
可选优化:移除空列表的键
如果某个键对应的路径列表过滤后变成空列表(比如没有"Submitted"路径),你可以额外加一步移除这些无效键:
# 过滤掉值为空列表的键 filtered_dict = {k: v for k, v in filtered_dict.items() if v}
内容的提问来源于stack exchange,提问作者tastatham




