集合字典中的和值

loc*_*oto 2 python dictionary sum set

我有一个可能是一个简单的任务,我尝试了几个解决方案,但似乎无法弄明白.

我有一个包含基因名称和相应位置的集合的dict,如:

gene_nr_snp = {'gene1: {3,9}, gene2: {2,3,1}, gene3: {1}}
Run Code Online (Sandbox Code Playgroud)

我想返回一个带有基因名称和相应求和值的字典.

我尝试了以下方法:

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)
Run Code Online (Sandbox Code Playgroud)

这将返回相同的值集

Mar*_*ers 7

你可以使用dict理解和sum()功能:

gene_values = {gene: sum(snp) for gene, snp in gene_nr_snp.items()}
Run Code Online (Sandbox Code Playgroud)

您的尝试失败,因为您为每个值设置snp_total变量,因此无法对任何内容求和.然后你似乎把它视为一个集合,但字典开始是空的,所以你会得到一个.一个工作版本将是:0snpgene_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
Run Code Online (Sandbox Code Playgroud)

但是这个sum()函数使内循环比需要的更冗长; 整个循环体可以替换为gene_values[gene] = sum(snp).