python从文件中读取并检查使用dicts查找匹配的详细信息

时间:2016-04-27 19:45:28

标签: python-2.7 dictionary printing

我正在尝试学习python并在这里进行了一些研究,但无法将这些信息放在一起......我的导师给了我一个额外的任务,在搜索了在线部分代码后我发现很难完成。 ..实际上我在过去两周学习python。

我有一个名为

的文件
dna.txt

以下数据已存储

  

ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCCCCTGGAGGGTGGCCCCACCGGCCGAGACAGCGAGCATATGCAGGAAGCGGCAGGAATAAGGAAAAGCAGCCTCCTGACTTTCCTCGCTTGGTGGTTTGAGTGGACCTCCCAGGCCAGTGCCGGGCCCCTCATAGGAGAGGAAGCTCGGGAGGTGGCCAGGCGGCAGGAAGGCGCACCCCCCCAGCAATCCGCGCGCCGGGACAGAATGCCCTGCAGGAACTTCTTCTGGAAGACCTTCTCCTCCTGCAAATAAAACCTCACCCATGAATGCTCACGCAAGTTTAATTACAGACCTGAA

我有三个男性的细节,如眼睛颜色,头发颜色等...我应该有一个程序运行,将检查存储在txt文件中的数据读取它,并将它与信息进行比较在男性和打印出谁是匹配...

我能够把它放在一起的是:

  evidence = open("dna.txt", "r").read()

john= {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "TTAGCTATCGC",
    "color_eyes": "AAGTAGTGAC",
    "type_face": "ACCACAA"
}

matthew = {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "CCAGCAATCGC",
    "color_eyes": "TTGTGGTGGC",
    "type_face": "AGGCCTCA"
}

edward = {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "GCCAGTGCCG",
    "color_eyes": "GGGAGGTGGC",
    "type_face": "GCCACGG"
}

现在我被困在了下一个, 在我之前的“更容易”的任务中没有使用dicts我继续if, and, elif等...但不确定在这种情况下是否会使用相同的...

我用

做了一些尝试
if evidence.find('John') > -1 :
    print "john is the thief!"

elif evidence.find('Matthew') > -1 :
    print "matthew is the thief!"

elif evidence.find('Edward') > -1 :
    print "edward is the thief!"

但不确定这是否正确,尽管代码正在运行但实际上并未打印出该名称。 我以前没有使用python的经验...我可能会完全错过这个解决方案,特别是因为我得到了使用“数组和字典”字典的说明“ - 如果我做对了

感谢大家帮助我...

1 个答案:

答案 0 :(得分:0)

在调用evidence.find('Edward')时,您正在传递一个字符串,因此它正在evidence中搜索该字符串,而不是。{/ p>

您想在字符串中搜索每个字典的每个元素。这可以通过python的优秀iteritems()

来完成
matching_fields = 0
for key, value in edward:
  if value in example:
    matching_fields += 1

这将计算example字符串中任意位置存在的值的数量。你可以为每个嫌疑人重复这个过程,那个匹配最多的那个应该是你的答案!

免责声明:我不知道DNA是如何工作的,如果gendercolor_hair等需要在某个地方,你可以使用切片:

matching_fields = 0
for key, value in edward:
  if value == example[expected_location:length]:
    matching_fields += 1

编辑:这样的事情应该很接近:

evidence = open("dna.txt", "r").read()

john= {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "TTAGCTATCGC",
    "color_eyes": "AAGTAGTGAC",
    "type_face": "ACCACAA"
}

matthew = {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "CCAGCAATCGC",
    "color_eyes": "TTGTGGTGGC",
    "type_face": "AGGCCTCA"
}

edward = {
    "gender": "TGCAGGAACTTC",
    "race": "AAAACCTCA",
    "color_hair": "GCCAGTGCCG",
    "color_eyes": "GGGAGGTGGC",
    "type_face": "GCCACGG"
}

suspects = [john, matthew, edward]
best_guess = None
highest_similarity = 0

for suspect in suspects: # iterate through potential suspects
  matches = 0
  for key, value in suspect.iteritems(): # iterate through current suspects attributes
    if value in evidence:
      matches += 1
  if matches > highest_similarity:
    highest_similarity = matches
    best_guess = suspect

for key, val in list(locals().iteritems()):
     if val is best_guess:  # NOTE: 'is' for checking identity
         suspect_name = key
         print suspect_name, " is the culprit!"

在第一个for循环后,best_guess是与example最匹配的字典。有关如何获取可疑字典的名称,请参阅this answer