Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中比较两个字典值的多个条件_Python - Fatal编程技术网

在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

太好了,我实际上要学习“枚举”,这对我来说是一个很好的起点!太好了,我实际上要学习“枚举”,这对我来说是一个很好的起点!