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

如何使用字典与列表按基因键合并多文件输入生成单条输出行

实现代码

基于你已经构建好的字典和实验数据列表,直接运行以下代码即可生成符合要求的合并文件:

# 打开输出文件,写入合并结果
with open("merged_gene_exp.txt", "w") as out_file:
    # 写入输出表头
    out_file.write("Gene.name\tExperiment.1\tExperiment.2\tGene description\tChromosome number\n")
    # 遍历匹配基因名和对应的实验值
    for gene, exp1, exp2 in zip(genes, exp1values, exp2values):
        # 查询注释信息,不存在则返回N/A
        gene_desc = gene_annotations.get(gene, {}).get("Gene Description", "N/A")
        # 查询染色体信息,不存在则返回N/A
        chrom_num = gene_chroms.get(gene, {}).get("Chromosome Number", "N/A")
        # 拼接行并写入文件
        out_file.write(f"{gene}\t{exp1}\t{exp2}\t{gene_desc}\t{chrom_num}\n")

关键逻辑说明

  • 用zip()函数同步遍历三个实验数据列表,确保基因名和对应的两个实验值一一对应,不会出现匹配错位
  • 字典查询时使用两层get()方法:第一层判断当前基因是否在注释字典中,不存在则返回空字典;第二层查询具体字段值,找不到就返回默认值N/A,可以完全避免键不存在时报错的问题
  • 输出默认使用制表符分隔,和你输入文件的格式保持一致,后续可以直接用Excel、记事本等工具打开查看

可选优化(简化字典构建)

你原来的代码需要两次读取注释文件,其实一次读取就可以同时构建两个字典,减少文件IO开销,优化后的构建代码如下:

gene_annotations = {}
gene_chroms = {}
with open("human_gene_annotations.txt", "rt") as infile:
    # 跳过表头行
    infile.readline()
    for line in infile:
        line = line.rstrip()
        info = line.split("\t")
        gene_name = info[0]
        gene_annotations[gene_name] = {"Gene Description": info[1]}
        gene_chroms[gene_name] = {"Chromosome Number": info[2]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:06:04