Python 查找列表字典中具有特定元素的所有元素

Python 查找列表字典中具有特定元素的所有元素,python,rosalind,Python,Rosalind,我正在通过罗莎琳解决一个问题。我已经有一个星期没有被卡住了。我将尽可能简单地解释这一点 输入-一个名为Genome的字符串,以及整数k、L和t。基因组是一系列需要分类的遗传密码 k是一个给定的整数,即每个公里数的大小。kmer是遗传密码的一个子串,可能有某种意义t是kmer在束中出现的次数L是形成束的文本长度。例如,如果L=400我们正在寻找一个在400个字符的集群中出现t次的kmer 输出-基因组中形成(L,t)簇的所有不同k-聚体 该代码获取基因组,将其分解为所有可能的Kmer,并将这些Km

我正在通过罗莎琳解决一个问题。我已经有一个星期没有被卡住了。我将尽可能简单地解释这一点

输入-一个名为
Genome
的字符串,以及整数
k
L
t
。基因组是一系列需要分类的遗传密码

k
是一个给定的整数,即每个公里数的大小。kmer是遗传密码的一个子串,可能有某种意义
t
是kmer在束中出现的次数
L
是形成束的文本长度。例如,如果
L=400
我们正在寻找一个在400个字符的集群中出现
t
次的kmer

输出-基因组中形成(L,t)簇的所有不同k-聚体

该代码获取基因组,将其分解为所有可能的Kmer,并将这些Kmer插入字典。KMER是钥匙。这些值的设置如下所示
[乘客频率,[乘客位置]]
。该值以如下方式存储在字典中:
{'aaaaaaa':[y[z1,z2]}
,其中
y
是出现的次数,
z1
z2
是找到子字符串的字符串中的索引

基本上,我希望反复阅读字典。我想找到文本中出现次数
t
的键。也就是说,我想查找字典
d
的所有键,以便
d[key]==t

下面是代码,后面是输出

代码:

from pprint import pprint
genome = "CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACACGACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC"
k = 5
L = 75
t = 4
len_genome = int(len(genome))
l = []

for i in range (len_genome - k + 1):
    kmer = genome[i:i +k]
    # list of every possible kmer
    l.append(kmer)

d = {}
for i in range (len(l)):
    try:
        d[l[i]][0] += 1
        d[l[i]][1].append(i)
    except KeyError:
        d[l[i]] = [1, [i]]

pprint(d)
{'AATGT': [4, [21, 73, 81, 86]],
 'CGACA': [4, [6, 54, 59, 67]],
 'GAAGA': [4, [16, 26, 37, 42]]}

如果我理解正确,您需要所有Kmer的列表,这些Kmer是口述
d
的键

要获取字典的所有键,可以使用dictionary类的
keys()
方法,如下所示:

kmer_list=d.keys()
如果要查找发生一定次数的所有序列,请尝试:

occurance_times=4
kmer_list=filter(lambda x: d[x][0]==occurance_times, d.keys())
编辑: 如果我理解正确,这很容易实现:

from pprint import pprint
x = 4
pprint({key: value for key, value in d.iteritems() if value[0] == x})
输出:

from pprint import pprint
genome = "CGGACTCGACAGATGTGAAGAAATGTGAAGACTGAGTGAAGAGAAGAGGAAACACGACACGACATTGCGACATAATGTACGAATGTAATGTGCCTATGGC"
k = 5
L = 75
t = 4
len_genome = int(len(genome))
l = []

for i in range (len_genome - k + 1):
    kmer = genome[i:i +k]
    # list of every possible kmer
    l.append(kmer)

d = {}
for i in range (len(l)):
    try:
        d[l[i]][0] += 1
        d[l[i]][1].append(i)
    except KeyError:
        d[l[i]] = [1, [i]]

pprint(d)
{'AATGT': [4, [21, 73, 81, 86]],
 'CGACA': [4, [6, 54, 59, 67]],
 'GAAGA': [4, [16, 26, 37, 42]]}

(原始答复如下)

我不知道什么是块,但这就是访问的方式,比如说'AATGT'中的第二个整数(第七个dict项,73):

['AATGT']
获取键的值
'AATGT'
,第一个
[1]
访问最外层列表中的第二项,第二个
[1]
访问最内层列表中的第二项

这将产生预期的
73

如果要迭代所有这些值,可以使用double for循环:

# d.iteritems() should be d.items() in Python 3.x
for key, sublist in d.iteritems():
    print('kmer: {}'.format(key))
    for value in sublist[1]:
        print value
这就产生了

kmer: ACACG
51
56
kmer: TAATG
72
85
kmer: AGAGG
44
kmer: GGACT
1
(...)
从集合导入defaultdict
code=“AGCTTTTT…TTTTT C”
(k,L,t,计数器,结果)=(9500,3,1,[]))
d=默认DICT(列表)
对于范围(0,长度(代码))内的z:
d[代码[z:z+k]]。追加(z)
对于d.items()中的值:
如果len(值[1])>=3:
对于范围(0,len(值[1])-2)内的y:
如果值[1][y+t-1]-值[1][y]1:
打印结果[0],
对于范围(0,len(结果)-1)内的i:
如果结果为[i+1]=结果[i]:
计数器+=1
打印结果[i+1],
打印计数器

试着像编程问题一样提问,而不是像生物学问题一样提问。提示:不要使用
genome
kmer
clump
这些词。您可以添加代码的错误吗?i、 e.输出的具体错误是什么,输出应该是什么?同时检查你的缩进。你的缩进被破坏了。这是使用制表符而不是空格的结果。不想在这里发动一场圣战,所以要么更改编辑器设置,要么修复这里的缩进:)你说的“丛”到底是什么意思?它只是
基因组中包含的整个字符串吗?