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

如何基于Python字典定义rule all以生成指定格式的输出文件路径?

在Snakemake中基于字典生成rule all的目标路径

假设我有以下Python字典:

d = {'A': ['a', 'b', 'c'],
     'B': ['d', 'e', 'f']}

我希望针对字典d中的每个键,为d[key]内的每个元素生成格式为f"{key}/plots/{element}.pdf"的文件路径。

具体来说,基于上述字典d,期望得到的输出文件路径如下:

"A/plots/a.pdf"
"A/plots/b.pdf"
"A/plots/c.pdf"
"B/plots/d.pdf"
"B/plots/e.pdf"
"B/plots/f.pdf"

请问如何定义一个rule all,基于该字典选择性地展开输入以实现此需求?


解决方案

在Snakemake中,你可以通过遍历字典的键值对生成目标路径列表,直接传入rule all的input参数,有两种常见实现方式:

方式一:列表推导式(简洁写法)

d = {'A': ['a', 'b', 'c'],
     'B': ['d', 'e', 'f']}

# 嵌套推导式生成所有目标路径
all_targets = [f"{key}/plots/{elem}.pdf" for key, elems in d.items() for elem in elems]

rule all:
    input:
        all_targets

方式二:普通循环(可读性更强)

如果觉得嵌套推导式不够直观,也可以用循环逐步构建路径列表:

d = {'A': ['a', 'b', 'c'],
     'B': ['d', 'e', 'f']}

all_targets = []
for key, elems in d.items():
    for elem in elems:
        all_targets.append(f"{key}/plots/{elem}.pdf")

rule all:
    input:
        all_targets

说明

两种写法最终都会生成符合要求的路径列表,rule all会将这些路径作为全局目标,触发对应的规则来生成这些文件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:34:50