python - 在Python中查找列表和字典之间的共同元素

标签 python dictionary bioinformatics

我有两个这样的文件, 蛋白质列表 -

TRIUR3_05947-P1
TRIUR3_06394-P1
Traes_1BL_EB95F4919.2

以及制表符分隔的重叠群和蛋白质的字典 -

contig22 TRIUR3_05947-P1
contig15 TRIUR3_05947-P1
contig1 Traes_1BL_EB95F4919.2
contig67 Traes_1BL_EB95F4919.2
contig98 Traes_1BL_EB95F4919.2
contig45 MLOC_71599.4

我想要的输出是它找到所有常见的蛋白质并打印这样的结果,

contig22 TRIUR3_05947-P1
contig15 TRIUR3_05947-P1
contig1 Traes_1BL_EB95F4919.2
contig67 Traes_1BL_EB95F4919.2
contig98 Traes_1BL_EB95F4919.2

这是我下面的脚本,但它给我的只是公共(public) key 的结果,我想是覆盖的,如何解决这个问题?

f1=open('mydict.txt','r')
f2=open('mylist.txt','r')
output = open('result.txt','w')
dictA= dict()
for line1 in f1:
    listA = line1.rstrip('\r\n').split('\t')
    dictA[listA[1]] = listA[0]

for line1 in f2:
    new_list=line1.rstrip('\n').split()
    query=new_list[0]
    if query in dictA:
        listA[0] = dictA[query]
        output.write(query+'\t'+str(listA[0])+'\n')

最佳答案

你这样做的方式是错误的。如果您将“字典文件”存储在字典结构中,使用蛋白质名称作为键,您将丢失信息。

更好的方法是首先读取蛋白质列表,并将所有蛋白质名称存储在一个集合中。然后,您读取字典文件并打印蛋白质名称在集合中的所有行。

with open('mylist.txt') as mylist:
    proteins = set(line.strip() for line in mylist)

with open('mydict.txt') as mydict, open('result.txt', 'w') as output:
    for line in mydict:
        _, protein = line.strip().split()
        if protein in proteins:
            output.write(line)

关于python - 在Python中查找列表和字典之间的共同元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24208000/

相关文章:

python - 如果当对象的引用计数达到零时不能保证Python的weakref死亡,那么它的用例是什么?

ios - iOS map 中的引脚在玩 map 后相互交换图像(Xamarin)

python - 当应该有一个值python时,字典不返回

python - 将 pygr 导入 jython 在 C 库上失败

python - Seaborn 多轴图将不同颜色分配给相同/共享类别色调

python - 如何在QTextEdit中自动滚动文本(动画效果)?

python - 使用python从文本中解析id

string - 使用 Mathematica 在定义位置的左侧或右侧“StringCut”

python - 过滤不静音视频ffmpeg-python

python - 如何从两个嵌套列表制作字典?