def consensus(seqs):
>>> profiel(seqs)
{'A': [0, 3, 1, 2, 3, 4, 0, 3], 'C': [0, 4, 3, 1, 0, 0, 5, 1], 'T': [3, 0, 1, 2, 4, 3, 1, 1], 'G': [4, 0, 2, 2, 0, 0, 1, 2]}
>>> consensus(profiel(seqs))
'GCCNTACA'
如果列表中的编号最高,如何返回字典的键?所以第一个是G
,因为
A = 0 , C = 0, T = 3, G = 4
等等。
答案 0 :(得分:1)
首先,您可以使用max函数的key
关键字(python max function using 'key' and lambda expression)。然后,您可以使用生成器表达式迭代列表并将其连接到字符串中。
dic = {'A': [0, 3, 1, 2, 3, 4, 0, 3], 'C': [0, 4, 3, 1, 0, 0, 5, 1], 'T': [3, 0, 1, 2, 4, 3, 1, 1], 'G': [4, 0, 2, 2, 0, 0, 1, 2]}
''.join(max(dic, key=lambda v: dic[v][i]) for i in xrange(len(dic['A'])))
### 'GCCATACA'
请注意,这仅适用于所有列表具有相同数量的元素的情况。
答案 1 :(得分:0)
要选择具有最大值的键,请使用此
max(dict, key=dict.get)
答案 2 :(得分:0)
这将完成作业,具有最高值的列表的键:
mydict = {'A': [0, 3, 1, 2, 3, 4, 0, 3], 'C': [0, 4, 3, 1, 0, 0, 5, 1], 'T': [3, 0, 1, 2, 4, 3, 1, 1], 'G': [4, 0, 2, 2, 0, 0, 1, 2]}
def getKeyBigger(d);
key,_ = reduce(lambda x, y: x if max(x[1]) > max(y[1]) else y, d.items())
return key
>>>print getKeyBigger(mydict)
>>>C
答案 3 :(得分:0)
def return_max(dic):
maxnum = max(i[0] for i in dic.values())
for i in dic.iteritems():
if maxnum == i[1][0]:
return i[0]
dic = {'A': [0, 3, 1, 2, 3, 4, 0, 3], 'C': [0, 4, 3, 1, 0, 0, 5, 1], 'T': [3, 0, 1, 2, 4, 3, 1, 1], 'G': [4, 0, 2, 2, 0, 0, 1, 2]}
print return_max(dic)
输出:
G
答案 4 :(得分:0)
基于zetsys解决方案,这是一个(丑陋的)一个班轮:
"".join([max(d, key={k: v[x] for k, v in d.items()}.get) for x in xrange(len(d.values()[0]))]
假设每个列表具有相同的长度。 (和d是你的输入词典)