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)
这将返回相同的值集
你可以使用dict理解和sum()
功能:
gene_values = {gene: sum(snp) for gene, snp in gene_nr_snp.items()}
Run Code Online (Sandbox Code Playgroud)
您的尝试失败,因为您为每个值设置snp_total
变量,因此无法对任何内容求和.然后你似乎把它视为一个集合,但字典开始是空的,所以你会得到一个.一个工作版本将是:0
snp
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
Run Code Online (Sandbox Code Playgroud)
但是这个sum()
函数使内循环比需要的更冗长; 整个循环体可以替换为gene_values[gene] = sum(snp)
.