2017-04-23 93 views
2

我有什么可能是一个简单的任务,我尝试了几个解决方案,但似乎无法弄清楚。总结值的集合字典

我有含有基因名称和相应的位置设置一个字典作为套这样的:

gene_nr_snp = {'gene1: {3,9}, gene2: {2,3,1}, gene3: {1}} 

我想回到与基因名字的字典和相应的累加值。

我试过如下:

gene_values = {} 

for gene, snp in gene_nr_snp.items(): 
    for i in snp: # iterate the values in each set 
     snp_total = 0 
     snp_total += i 
     gene_values[gene].add(snp_total) 

这是返回相同的设定值

回答

7

您可以使用字典理解和sum() function

gene_values = {gene: sum(snp) for gene, snp in gene_nr_snp.items()} 

你的尝试失败,因为你对于snp中的每个值,设置变量为0,因此未能计算任何值。你似乎把gene_values[gene]作为一个集合,但字典开始空,所以你会得到一个KeyError。工作版本将是:

gene_values = {} 

for gene, snp in gene_nr_snp.items(): 
    snp_total = 0 
    for i in snp: # iterate the values in each set 
     snp_total += i 
    gene_values[gene] = snp_total 

sum()功能,使内循环,而不是需要更详细的;整个循环体可以替换为gene_values[gene] = sum(snp)