You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动