首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为来自两个不同文件的字典分配值

为来自两个不同文件的字典分配值
EN

Stack Overflow用户
提问于 2021-02-26 07:51:23
回答 1查看 19关注 0票数 0

我有一个这样的bam.txt文件:

代码语言:javascript
复制
exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bam
exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bam
exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bam

另一个文件bai.txt

代码语言:javascript
复制
exomesinglesample_out/bam/pfg001G.GRCh38DH.target.bai
exomesinglesample_out/bam/pfg002G.GRCh38DH.target.bai
exomesinglesample_out/bam/pfg014G.GRCh38DH.target.bai

我想创建一个字典列表,其中键总是这样的:

代码语言:javascript
复制
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的值不同,字典应该如下所示:

代码语言:javascript
复制
[{'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 generatorslist来解决这个问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-26 08:00:33

您可以使用zip()逐行遍历两个文件,并编写字典,如下所示:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
[{'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'}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66381994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档