在python中比较两个字典值的多个条件
我有以下两本字典:在python中比较两个字典值的多个条件,python,Python,我有以下两本字典: fastaDict1 = {'seq1': 'NNNACACGT', 'seq2': 'NNNACACGT'} fastaDict2 = {'seq1': 'NNNGCACGT'} 我想做的是在fastaDict1中选择一个键,检查键是否存在于fastaDict2中,如果键存在,那么我想循环检查fastaDict1键值中的每个字符,并检查字符是否与fastaDict2中的对应字符匹配。也就是说,如果相同的字符在两个字符串中具有相同的位置 我编写了以下代码: for keys
fastaDict1 = {'seq1': 'NNNACACGT', 'seq2': 'NNNACACGT'}
fastaDict2 = {'seq1': 'NNNGCACGT'}
我想做的是在fastaDict1中选择一个键,检查键是否存在于fastaDict2中,如果键存在,那么我想循环检查fastaDict1键值中的每个字符,并检查字符是否与fastaDict2中的对应字符匹配。也就是说,如果相同的字符在两个字符串中具有相同的位置
我编写了以下代码:
for keys in fastaDict1.keys():
print keys
for base in range(0, len(fastaDict1[keys])):
if keys in fastaDict2 and fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
print fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base)
else:
print 'Bases do not match' + '\t' + str(base)
但我得到的结果是:
seq2
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
Bases do not match 4
Bases do not match 5
Bases do not match 6
Bases do not match 7
Bases do not match 8
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
A A 3
C C 4
A A 5
C C 6
G G 7
T T 8
我希望得到的是:
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
C C 4
A A 5
C C 6
G G 7
T T 8
我想我对条件句的逻辑有一个问题,我想不出来,任何帮助都将不胜感激,谢谢 您的条件有点错误,根据需要,如果键不在fastaDict2中,您不希望迭代这些值,如果是这种情况,您需要将条件-
如果键在fastaDict2中:
移动到内部for循环之前
范例-
for keys in fastaDict1.keys():
print keys
if keys in fastaDict2:
for base in range(0, len(fastaDict1[keys])):
if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
print fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base)
else:
print 'Bases do not match' + '\t' + str(base)
示例/演示-
>>> fastaDict1 = {'seq1': 'NNNACACGT', 'seq2': 'NNNACACGT'}
>>> fastaDict2 = {'seq1': 'NNNGCACGT'}
>>> for keys in fastaDict1.keys():
... print(keys)
... if keys in fastaDict2:
... for base in range(0, len(fastaDict1[keys])):
... if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
... print(fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base))
... else:
... print('Bases do not match' + '\t' + str(base))
...
seq2
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
C C 4
A A 5
C C 6
G G 7
T T 8
您的条件有点错误,根据需要,如果键不在fastaDict2中,您不希望迭代这些值,如果是这种情况,您需要将条件-
如果键在fastaDict2中:
移动到内部for循环之前
范例-
for keys in fastaDict1.keys():
print keys
if keys in fastaDict2:
for base in range(0, len(fastaDict1[keys])):
if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
print fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base)
else:
print 'Bases do not match' + '\t' + str(base)
示例/演示-
>>> fastaDict1 = {'seq1': 'NNNACACGT', 'seq2': 'NNNACACGT'}
>>> fastaDict2 = {'seq1': 'NNNGCACGT'}
>>> for keys in fastaDict1.keys():
... print(keys)
... if keys in fastaDict2:
... for base in range(0, len(fastaDict1[keys])):
... if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
... print(fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base))
... else:
... print('Bases do not match' + '\t' + str(base))
...
seq2
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
C C 4
A A 5
C C 6
G G 7
T T 8
如果您的“问题”是打印seq2行,这是由于您在进入该键后进行的检查造成的,如果dict2没有该键。
因此,将if移到前面,如下所示:
for keys in fastaDict1.keys():
print keys
if fastaDict2.has_key(keys):
for base in range(0, len(fastaDict1[keys])):
if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
print fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base)
else:
print 'Bases do not match' + '\t' + str(base)
您的打印将是:
seq2
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
C C 4
A A 5
C C 6
G G 7
T T 8
如果您的“问题”是打印seq2行,这是由于您在进入该键后进行的检查造成的,如果dict2没有该键。
因此,将if移到前面,如下所示:
for keys in fastaDict1.keys():
print keys
if fastaDict2.has_key(keys):
for base in range(0, len(fastaDict1[keys])):
if fastaDict1[keys][base] != 'N' and fastaDict1[keys][base] == fastaDict2[keys][base]:
print fastaDict1[keys][base] + '\t' + fastaDict2[keys][base] + '\t' + str(base)
else:
print 'Bases do not match' + '\t' + str(base)
您的打印将是:
seq2
seq1
Bases do not match 0
Bases do not match 1
Bases do not match 2
Bases do not match 3
C C 4
A A 5
C C 6
G G 7
T T 8
如果你好奇的话,我认为这段代码要简单一点
fastaDict1={'seq1':'nnnacagt','seq2':'nnnacagt'}
fastaDict2={'seq1':'NNNGCACGT'}
对于集合中的键(fastaDict1.keys())。交叉点(fastaDict2.keys()):
打印(键)
对于枚举中的i,s(fastaDict1[key]):
如果s!='N'和s==fastaDict2[key][i]:
打印({}\t{}\t{})。格式(s,s,i))
其他:
打印('base不匹配\t{}'。格式(i))
产生:
seq1
基数与0不匹配
碱基不匹配1
碱基不匹配2
垒不匹配3
C4
A五
C 6
G 7
T 8
如果您感到好奇,我认为这段代码要简单一点
fastaDict1={'seq1':'nnnacagt','seq2':'nnnacagt'}
fastaDict2={'seq1':'NNNGCACGT'}
对于集合中的键(fastaDict1.keys())。交叉点(fastaDict2.keys()):
打印(键)
对于枚举中的i,s(fastaDict1[key]):
如果s!='N'和s==fastaDict2[key][i]:
打印({}\t{}\t{})。格式(s,s,i))
其他:
打印('base不匹配\t{}'。格式(i))
产生:
seq1
基数与0不匹配
碱基不匹配1
碱基不匹配2
垒不匹配3
C4
A五
C 6
G 7
T 8
太好了,我实际上要学习“枚举”,这对我来说是一个很好的起点!太好了,我实际上要学习“枚举”,这对我来说是一个很好的起点!