我有一个这样的bam.txt文件:
exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bam
exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bam
exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bam另一个文件bai.txt
exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bai
exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bai
exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bai我想创建一个字典列表,其中键总是这样的:
keys = ['bam','bam_index']
d = dict.fromkeys(keys)
l = [d for x in range(3)]
print(l)
[{'bam': None, 'bam_index': None}, {'bam': None, 'bam_index': None}, {'bam': None, 'bam_index': None}]与具有None的值不同,字典应该如下所示:
[{'bam': 'exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bai'}, {'bam': 'exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bai'}, {'bam': 'exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bai'}]换句话说,字典列表中第一个字典的第一个值必须具有bam.txt的第一行,列表中第一个字典的第二个值必须一直到两个文件中的最后一行的bai.txt的第一行为止。
我知道dict值不能被索引,因为字典是python中无序的数据类型,所以可能需要用tuples generators或list来解决这个问题。
发布于 2021-02-26 08:00:33
您可以使用zip()逐行遍历两个文件,并编写字典,如下所示:
keys = ['bam','bam_index']
l = []
with open('bam.txt', 'r') as f1, open('bai.txt', 'r') as f2:
for lf1, lf2 in zip(f1, f2):
d = {keys[0] : lf1.strip(), keys[1] : lf2.strip()}
l.append(d)
print(l)输出:
[{'bam': 'exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bai'}, {'bam': 'exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bai'}, {'bam': 'exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bam', 'bam_index': 'exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bai'}]https://stackoverflow.com/questions/66381994
复制相似问题