如何解决如何在python中的字典中搜索多个值?
我是编码的新手...我必须从数据库创建字典(我相信我能够做到),但是我还没有找到任何有关如何搜索多个值的示例。在这种情况下,我希望代码带给我所有数字都匹配的人的名字(AGATC,AATG和TATC),而不仅仅是一个。 因此,例如,如果输入为2 8 3(我的变量count1 count2 count3),则结果应为Alice。
任何帮助/指导将不胜感激。
这是我的字典的样子:
{'Alice': OrderedDict([('AGATC','2'),('AATG','8'),('TATC','3')]),'Bob': OrderedDict([('AGATC','4'),'1'),'5')])
...
这是我到目前为止的代码:
from sys import argv
import csv
import re
#Opens the database and the sequence specified in the command-line argument
if len(argv) == 3:
database = csv.DictReader(open(argv[1],'r')) #opens the file in dictionary format
s = open(argv[2])
sequence = s.read()
else:
print("Missing command-line argument")
#Counts how many times STR repeats in the sequence by changing the STR definition to the maximum it found
str1 = "AGATC"
count1 = 0
while str1 in sequence:
count1 += 1
str1 += "AGATC"
print(count1)
str2 = "AATG"
count2 = 0
while str2 in sequence:
count2 += 1
str2 += "AATG"
print(count2)
str3 = "TATC"
count3 = 0
while str3 in sequence:
count3 += 1
str3 += "TATC"
print(count3)
#creates an empty dictionary
data_list = {}
#fill the dictionary
for row in database:
key = row.pop('name')
data_list[key] = row
print(data_list)
解决方法
我绝对同意先前关于使用更好的数据结构的评论,我相信以下内容可能对您现在有帮助:
from collections import OrderedDict
x = {'Alice': OrderedDict([('AGATC','2'),('AATG','8'),('TATC','3')]),'Bob': OrderedDict([('AGATC','4'),'1'),'5')])}
lst = [2,8,3]
for k in x.keys():
if lst == [int(y) for y in x[k].values()]:
print(k)
,
这就是我的解决方案:
from sys import argv
import csv
import re
if len(argv) == 3:
database = csv.DictReader(open(argv[1],'r'))
s = open(argv[2])
sequence = s.read()
else:
print("Missing command-line argument")
str1 = "AGATC"
count1 = 0
while str1 in sequence:
count1 += 1
str1 += "AGATC"
str2 = "AATG"
count2 = 0
while str2 in sequence:
count2 += 1
str2 += "AATG"
str3 = "TATC"
count3 = 0
while str3 in sequence:
count3 += 1
str3 += "TATC"
lst = [count1,count2,count3]
data_list = {}
for row in database:
key = row.pop('name')
data_list[key] = row
# print(data_list)
indicator = 0
for i in data_list.keys():
if lst == [int(y) for y in data_list[i].values()]:
print(i)
indicator += 1
if indicator == 0:
print("No match")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。