Python比较每个键具有多个值的两个字典并检索公共值

Python比较每个键具有多个值的两个字典并检索公共值,python,dictionary,intersect,Python,Dictionary,Intersect,我是初学者,我需要代码方面的帮助 我有两个列表格式的文件,我想用作字典。两个文件的格式相同。第1列有键,第2列有以“|”分隔的关联值。两个文件中可能不存在所有密钥 例如: File1.txt 1 b|c 2 a|b|d 3 a|b|c 4 a|b 9 a|b|c File2.txt 1 a|c 2 a|b|c|d|e 3 a|b|c 6 a|b|c 7 a|b|c 8 a|b|c

我是初学者,我需要代码方面的帮助

我有两个列表格式的文件,我想用作字典。两个文件的格式相同。第1列有键,第2列有以“|”分隔的关联值。两个文件中可能不存在所有密钥

例如: File1.txt

1   b|c    
2   a|b|d    
3   a|b|c    
4   a|b    
9   a|b|c
File2.txt

1   a|c  
2   a|b|c|d|e    
3   a|b|c    
6   a|b|c    
7   a|b|c    
8   a|b|c    
9   x|y
我想创建一个文件File3.txt,它具有每个键的公共值,并表示每个键。当键在两个列表中都不常见,且“没有匹配项”,其中键是常见的,但没有共享的公共值时,此单元格为空。(最后一部分是事后考虑的,因此它不会出现在我下面的代码中。)

例如: File3.txt

1   c    
2   a|b|d    
3   a|b|c    
4       
6       
7       
8       
9   no matches
以下是到目前为止我编写的代码。我想我已经完全离开了,但如果能得到任何帮助,我将不胜感激。谢谢大家!

#!/usr/bin/env python

table = {}
ref2gene = {}
table2 = {}
ref2gene2 = {}
with open('File1.txt') as f_in:  
    for line in f_in:
        row = line.strip()
        table[line.split('\t')[0]] = line.split('\t')[1]
        gene_name = row[0]        
        for ref in row[1].split('|'):
            ref2gene[ref] = gene_name

with open('File2.txt') as f_1, open('File3.txt', 'w') as f_2:   
    for line in f_1:
        row2 = line.strip()
        table2[line.split('\t')[0]] = line.split('\t')[1]        
        gene_name2 = row2[0]        
        for ref2 in row2[1].split('|'):
            ref2gene2[ref2] = gene_name2

def intersect_two_dicts (table, table2):
    return { k:v for k,v in table.iteritems() if ((k in table2)and(table[k]==table2[k])) }        

print (intersect_two_dicts(dicts[0], dicts[1]))     

试着用口述法来解决这个问题,只需将
print
替换为file
write

file1=open('a.txt','r')
file1=file1.readlines()
file1={i.split()[0]:i.split()[1] for i in file1}
print file1
#{'1': 'a|c', '3': 'a|b|c', '2': 'a|b|c|d|e', '7': 'a|b|c', '6': 'a|b|c', '9': 'x|y', '8': 'a|b|c'}


file2=open('b.txt','r')
file2=file2.readlines()
file2={i.split()[0]:i.split()[1] for i in file2}
print file2
#{'1': 'b|c', '9': 'a|b|c', '3': 'a|b|c', '2': 'a|b|d', '4': 'a|b'}

keys=set(file1.keys()+file2.keys())

for i in sorted(keys):
    if i in file1 and i in file2:
        file1_values=file1[i].split('|')
        file2_values=file2[i].split('|')
        intersec=set(file1_values)&set(file2_values)
        if len(intersec)>0:
            print i,'|'.join(intersec)
        else:print i, 'missing values'
    else:
        print i,'empty'
总产量
真管用!非常感谢你!我会给你一个+1,但我还不能…必须等到15次。我真的很感谢你的帮助:)
1 c
2 a|b|d
3 a|c|b
4 empty
6 empty
7 empty
8 empty
9 missing values