You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何更新字典列表中的路径值:将绝对路径转为相对路径

解决方案:移除路径前缀生成相对路径

方法1:直接修改原列表

遍历列表中的每个字典,针对path字段移除固定前缀/tmp/working/。Python 3.9+ 可用简洁的removeprefix方法,旧版本则用切片判断处理:

errorlist = [
    {"error": "Not found", "path": "/tmp/working/directory1/file1"},
    {"error": "Not found", "path": "/tmp/working/directory2/file1"},
    {"error": "Not found", "path": "/tmp/working/directory1/file2"},
    {"error": "Not found", "path": "/tmp/working/directory2/file2"}
]

prefix = "/tmp/working/"

# Python 3.9+ 版本写法
for item in errorlist:
    item["path"] = item["path"].removeprefix(prefix)

# 兼容Python 3.8及以下版本的写法
# for item in errorlist:
#     if item["path"].startswith(prefix):
#         item["path"] = item["path"][len(prefix):]

执行后原列表会被更新为:

[
    {"error": "Not found", "path": "directory1/file1"},
    {"error": "Not found", "path": "directory2/file1"},
    {"error": "Not found", "path": "directory1/file2"},
    {"error": "Not found", "path": "directory2/file2"}
]

方法2:生成新列表(不修改原数据)

如果不想改动原列表,可通过列表推导式生成结构完全一致的新列表:

prefix = "/tmp/working/"
new_errorlist = [
    {**item, "path": item["path"].removeprefix(prefix)}
    for item in errorlist
]

# 兼容旧版本的写法
# new_errorlist = [
#     {**item, "path": item["path"][len(prefix):] if item["path"].startswith(prefix) else item["path"]}
#     for item in errorlist
# ]

注意事项

  • 若存在部分路径不包含目标前缀的情况,建议加上startswith判断,避免误修改不符合条件的路径。
  • removeprefix方法只会移除开头的前缀,不会影响路径中间可能出现的相同字符串,比直接用replace更安全(replace会替换所有匹配的子串)。

内容的提问来源于stack exchange,提问作者Jedi6

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 18:29:58