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

如何用字典推导式一行代码将FastQ文件内容存入字典?

用字典推导式改写FastQ文件的字典存储代码

问题背景

我有一个FastQ格式的文件(以下为部分内容):

@SRR12345678.1
GAGCCATATGACCACGCCGGAGAATCTCGCCAAGCAGGCAAAGCTGATGGAAGGCTACGGTGCGCCCTGTTTTTAT
+SRR12345678.1
-@CCCGGGGFFGGCFGGGEEDFDFFGDFCEE,:@FDC8FE8,@FC8FFC,EFDFGE@FA,C9CE99F@7B7+CCE,CF,,6C,,C,+8++8++
@SRR12345678.5
CTTTATGCCCCCACAGTGCGATCAGGAAGTACATCGGCACCAGCATCATTTCCCAGAAGAAGAAGAACATGAACAT
+SRR12345678.5
CCCCCGFGGGGGDGDCFCFEDFEEDC?CDE9FAFGECF>FF8,C,FE8CEEFFF,,,,,,,,,,,,,C,,,,,:,:
@SRR12345678.6
GTCGATGGCCTGAACTACTCACGCTTCGAGAAGCAGATGCCTGCGCTGGCAGGTTTTGCTGAGCAAAATATTTCGT
+SRR12345678.6
-ACCCGFFGGGFCFGGGGGGGGCFGEGD8C878FAFGGCEFFEF7CFC7@,A+CEFD,CF,,,:,,,,:,

目前使用以下代码将文件内容存入字典:

file = open("test.fastq")

d={}
for i in file:
    d_key, *d_value = i.split()
    d[d_key] = d_value

由于文件体积较大,需仅使用字典存储,请问能否将上述循环用字典推导式写成一行代码?

解决方案

当然可以用字典推导式把这段循环简化为一行代码。以下是两种实现方式:

推荐写法(自动管理文件句柄)

with open("test.fastq") as file:
    d = {line.split()[0]: line.split()[1:] for line in file if line.strip()}

对应原始写法(不推荐,存在文件句柄泄漏风险)

d = {line.split()[0]: line.split()[1:] for line in open("test.fastq") if line.strip()}

代码说明

  • for line in file:遍历文件的每一行内容
  • line.split()[0]:将每行按空白分割后,取第一个元素作为字典的键,和原始代码中d_key的作用一致
  • line.split()[1:]:取分割后的剩余元素组成列表作为值,和原始代码中*d_value的效果完全匹配
  • if line.strip():过滤空行,避免处理空白行时出现索引错误,让代码更健壮

内容的提问来源于stack exchange,提问作者Breathe of fate

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:42:24