Python 为来自两个不同文件的字典赋值

Python 为来自两个不同文件的字典赋值,python,dictionary,Python,Dictionary,我有一个像这样的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

我有一个像这样的
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}]
[{'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': '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'}]
字典应该是这样的,而不是具有
None
的值:

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}]
[{'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': '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中字典是无序的数据类型,所以可能需要使用
元组
生成器
列表

来解决这个问题,您可以使用
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)
输出: