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

Snakemake中使用dict与expand组合时出现值丢失问题

问题排查与解决:Snakemake函数返回Dict时input_a为空的问题

核心原因

变量名冲突:函数get_rule_output()内部定义了局部变量output={},而全局作用域中也存在同名变量output='output'。执行expand(input_a, output=output, ...)时,output参数实际引用的是局部的空字典,而非全局的字符串'output',导致占位符{output}无法被正确替换,最终返回空列表。

解决方法

修改函数内部的字典变量名,避免与全局变量重名。示例代码如下:

# debug.smk
input_a='/{output}/to/{group_name}/input_a'
input_b='/{output}/to/{group_name}/input_b'

rule_a=True
rule_b=True

output='output'
group_name='group_name'

def get_rule_output(): 
    result={}  # 改名避免与全局output冲突
    if rule_a: 
        result['output_a']=expand(input_a, output=output, group_name=group_name)
        print(expand(input_a, output=output, group_name=group_name))
    if rule_b: 
        result['output_xx']=expand(input_b, output=output, group_name=group_name)

    print(result)
    
    return result

rule all: 
    input: 
        get_rule_output(), 

修改后,expand中的output=output会正确引用全局的字符串'output',占位符替换正常,返回的字典将包含两个预期的路径列表:

{'output_a': ['/output/to/group_name/input_a'], 'output_xx': ['/output/to/group_name/input_b']}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:57:33