Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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_Python 2.7 - Fatal编程技术网

Python 两个嵌套字典之间的匹配值

Python 两个嵌套字典之间的匹配值,python,python-2.7,Python,Python 2.7,我是Python新手,我正在尝试找到解决这个问题的方法。 我有两个嵌套字典:` dna_type = {"hair":{"black":"CCAGCAATCGC","brown":"GCCAGTGCCG","blonde":"TTAGCTATCGC"}, "face":{"square":"GCCACGG","round":"ACCACAA","oval":"AGGCCTCA"}, "eye":{"blue":"TTGTGGTGGC","green

我是Python新手,我正在尝试找到解决这个问题的方法。 我有两个嵌套字典:`

dna_type = {"hair":{"black":"CCAGCAATCGC","brown":"GCCAGTGCCG","blonde":"TTAGCTATCGC"},
            "face":{"square":"GCCACGG","round":"ACCACAA","oval":"AGGCCTCA"},
            "eye":{"blue":"TTGTGGTGGC","green":"GGGAGGTGGC","brown":"AAGTAGTGAC"},
            "gender":{"female":"TGAAGGACCTTC","male":"TGCAGGAACTTC"},
            "race":{"white":"AAAACCTCA","black":"CGACTACAG","asian":"CGCGGGCCG"}}

suspects = {"Eva":{"gender":"female","race":"white","hair":"blonde","eye":"blue","face":"oval"},
            "Larisa":{"gender":"female","race":"white","hair":"brown","eye":"brown","face":"oval"},
            "Matej":{"gender":"male","race":"white","hair":"black","eye":"blue","face":"oval"},
            "Miha":{"gender":"male","race":"white","hair":"brown","eye":"green","face":"square"}}
现在我想比较两个嵌套字典,找到DNA匹配值,并用corrispondig DNA序列打印出名称及其特征。 我试过这个:

while True:

    for cat,car in dna_type.iteritems():
        for name,pers in suspects.iteritems():
            if car == pers:
                print suspects[name][car]

但我仍在等待输出。

您仍在等待输出的原因是:

  • 您的
    for
    循环不会产生任何输出,因为test
    car==pers
    永远不会为真
  • 但是通过指定
    while True
    ,可以无限期地对
    循环重复此
  • car==pers
    永远不为真的原因是您期望
    car
    ,其值如下

    {'brown': 'GCCAGTGCCG', 'blonde': 'TTAGCTATCGC', 'black': 'CCAGCAATCGC'}
    
    {'hair': 'blonde', 'gender': 'female', 'race': 'white', 'eye': 'blue', 'face': 'oval'}
    
    等于
    pers
    ,其值如下

    {'brown': 'GCCAGTGCCG', 'blonde': 'TTAGCTATCGC', 'black': 'CCAGCAATCGC'}
    
    {'hair': 'blonde', 'gender': 'female', 'race': 'white', 'eye': 'blue', 'face': 'oval'}
    
    编辑以下问题的澄清

    数据定义:

    dna_type = {"hair":{"black":"CCAGCAATCGC","brown":"GCCAGTGCCG","blonde":"TTAGCTATCGC"},
                "face":{"square":"GCCACGG","round":"ACCACAA","oval":"AGGCCTCA"},
                "eye":{"blue":"TTGTGGTGGC","green":"GGGAGGTGGC","brown":"AAGTAGTGAC"},
                "gender":{"female":"TGAAGGACCTTC","male":"TGCAGGAACTTC"},
                "race":{"white":"AAAACCTCA","black":"CGACTACAG","asian":"CGCGGGCCG"}}
    
    suspects = {"Eva":{"gender":"female","race":"white","hair":"blonde","eye":"blue","face":"oval"},
                "Larisa":{"gender":"female","race":"white","hair":"brown","eye":"brown","face":"oval"},
                "Matej":{"gender":"male","race":"white","hair":"black","eye":"blue","face":"oval"},
                "Miha":{"gender":"male","race":"white","hair":"brown","eye":"green","face":"square"}}
    
    给定这些字典,下面的代码循环通过
    可疑
    ,并从
    DNA\u类型
    中选择匹配的DNA字符串:

    for suspect, characteristics in suspects.items():
        for characteristic,value in characteristics.items():
            print suspect, characteristic, value, dna_type[characteristic][value]
    
    这将产生以下输出,我认为这与您想要的非常接近:

    Eva hair blonde TTAGCTATCGC
    Eva gender female TGAAGGACCTTC
    Eva race white AAAACCTCA
    Eva eye blue TTGTGGTGGC
    Eva face oval AGGCCTCA
    Matej hair black CCAGCAATCGC
    Matej gender male TGCAGGAACTTC
    Matej race white AAAACCTCA
    Matej eye blue TTGTGGTGGC
    Matej face oval AGGCCTCA
    Miha hair brown GCCAGTGCCG
    Miha gender male TGCAGGAACTTC
    Miha race white AAAACCTCA
    Miha eye green GGGAGGTGGC
    Miha face square GCCACGG
    Larisa hair brown GCCAGTGCCG
    Larisa gender female TGAAGGACCTTC
    Larisa race white AAAACCTCA
    Larisa eye brown AAGTAGTGAC
    Larisa face oval AGGCCTCA
    

    请注意,这绝对没有错误检查,因此,如果
    dna\u type
    中缺少数据(例如,某些dna字符串表示面,但缺少椭圆面),它将失败。

    您仍在等待输出的原因是:

  • 您的
    for
    循环不会产生任何输出,因为test
    car==pers
    永远不会为真
  • 但是通过指定
    while True
    ,可以无限期地对
    循环重复此
  • car==pers
    永远不为真的原因是您期望
    car
    ,其值如下

    {'brown': 'GCCAGTGCCG', 'blonde': 'TTAGCTATCGC', 'black': 'CCAGCAATCGC'}
    
    {'hair': 'blonde', 'gender': 'female', 'race': 'white', 'eye': 'blue', 'face': 'oval'}
    
    等于
    pers
    ,其值如下

    {'brown': 'GCCAGTGCCG', 'blonde': 'TTAGCTATCGC', 'black': 'CCAGCAATCGC'}
    
    {'hair': 'blonde', 'gender': 'female', 'race': 'white', 'eye': 'blue', 'face': 'oval'}
    
    编辑以下问题的澄清

    数据定义:

    dna_type = {"hair":{"black":"CCAGCAATCGC","brown":"GCCAGTGCCG","blonde":"TTAGCTATCGC"},
                "face":{"square":"GCCACGG","round":"ACCACAA","oval":"AGGCCTCA"},
                "eye":{"blue":"TTGTGGTGGC","green":"GGGAGGTGGC","brown":"AAGTAGTGAC"},
                "gender":{"female":"TGAAGGACCTTC","male":"TGCAGGAACTTC"},
                "race":{"white":"AAAACCTCA","black":"CGACTACAG","asian":"CGCGGGCCG"}}
    
    suspects = {"Eva":{"gender":"female","race":"white","hair":"blonde","eye":"blue","face":"oval"},
                "Larisa":{"gender":"female","race":"white","hair":"brown","eye":"brown","face":"oval"},
                "Matej":{"gender":"male","race":"white","hair":"black","eye":"blue","face":"oval"},
                "Miha":{"gender":"male","race":"white","hair":"brown","eye":"green","face":"square"}}
    
    给定这些字典,下面的代码循环通过
    可疑
    ,并从
    DNA\u类型
    中选择匹配的DNA字符串:

    for suspect, characteristics in suspects.items():
        for characteristic,value in characteristics.items():
            print suspect, characteristic, value, dna_type[characteristic][value]
    
    这将产生以下输出,我认为这与您想要的非常接近:

    Eva hair blonde TTAGCTATCGC
    Eva gender female TGAAGGACCTTC
    Eva race white AAAACCTCA
    Eva eye blue TTGTGGTGGC
    Eva face oval AGGCCTCA
    Matej hair black CCAGCAATCGC
    Matej gender male TGCAGGAACTTC
    Matej race white AAAACCTCA
    Matej eye blue TTGTGGTGGC
    Matej face oval AGGCCTCA
    Miha hair brown GCCAGTGCCG
    Miha gender male TGCAGGAACTTC
    Miha race white AAAACCTCA
    Miha eye green GGGAGGTGGC
    Miha face square GCCACGG
    Larisa hair brown GCCAGTGCCG
    Larisa gender female TGAAGGACCTTC
    Larisa race white AAAACCTCA
    Larisa eye brown AAGTAGTGAC
    Larisa face oval AGGCCTCA
    

    请注意,这绝对没有错误检查,因此,如果
    dna\u type
    中缺少数据(例如,一些dna字符串表示面,但缺少椭圆面),它将失败。

    感谢您的解释,我的意思是:我想比较两个嵌套的dict,当棕色的DNA代码和嫌疑犯的棕色特征之间存在匹配时,只需打印出嫌疑犯的姓名和头发:DNA,性别:DNA,种族:DNA等等……我尝试了你的解决方案,但它给了我一个错误:回溯(最近的调用最后一次):文件“C:/Python27/forens.py”,第16行,打印嫌疑犯,特征,值,dna_类型[特征][值]TypeError:Unhable type:“dict”该消息表示我们没有使用相同的数据。它表示您有一个变量,该变量必须是
    characteristic
    data
    ,即
    dict
    ,当它应该是字符串时。我已重试该练习,在我这方面它仍然有效。启动新的Python会话并重试同样,完成
    dna\u类型
    嫌疑犯
    的定义,如编辑后的回复所示。感谢您的解释,我的意思是:我想比较两个嵌套的dict,当棕色dna代码和嫌疑犯的棕色特征之间存在匹配时,只需打印出嫌疑犯的姓名即可h头发:DNA,性别:DNA,种族:DNA等等…我尝试了你的解决方案,但它给了我一个错误:回溯(最后一次调用):文件“C:/Python27/forens.py”,第16行,打印嫌疑犯,特征,值,DNA_类型[特征][值]TypeError:Unhable type:“dict”该消息表示我们没有使用相同的数据。它表示您有一个变量,该变量必须是
    characteristic
    data
    ,即
    dict
    ,当它应该是字符串时。我已重试该练习,在我这方面它仍然有效。启动新的Python会话并重试同样,完成
    dna_类型
    嫌疑犯
    的定义,如编辑后的回复所示。