繁体   English   中英

如何返回字典中的值?

[英]How to return values in dictionary?

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

等等。

首先,您可以使用 max 函数的key关键字( 使用 'key' 和 lambda 表达式的 python max 函数)。 然后,您可以使用生成器表达式遍历列表并将其连接成一个字符串。

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'

请注意,这仅在所有列表具有相同数量的元素时才有效。

要选择具有最大值的键,请使用此

max(dict, key=dict.get)

这将完成工作,列表中具有最高值的键:

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
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

基于 zetsys 解决方案,这是一个(丑陋的)单衬:

"".join([max(d, key={k: v[x] for k, v in d.items()}.get) for x in xrange(len(d.values()[0]))]

它假设每个列表都具有相同的长度。 (并且 d 是您的输入字典)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM