Python 两个嵌套字典之间的匹配值
我是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
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
循环不会产生任何输出,因为testcar==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
循环不会产生任何输出,因为testcar==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_类型
和嫌疑犯
的定义,如编辑后的回复所示。