Skip to main content
 首页 » 编程设计

python之在 python 中更改字典

2025年05月04日15傻小

我有一个像这个小例子的字典:

小例子:

dict = {1: {'A': 8520, 'C': 5772, 'T': 7610, 'G': 5518}, 2: {'A': 8900, 'C': 6155, 'T': 6860, 'G': 5505}} 

我想制作另一个词典词典,其中我将使用每个子词典中每个数字的频率而不是绝对数字。例如,对于第一个内部词典,我会有以下子词典:

1: {'A': 31.25, 'C': 21, 'T': 27.75, 'G': 20} 

这是预期的输出:

dict2 = {1: {'A': 31.25, 'C': 21, 'T': 27.75, 'G': 20}, 2: {'A': 32.5, 'C': 22.50, 'T': 25, 'G': 20}} 

我正在尝试使用以下命令在 python 中执行此操作:

dict2 = {} 
for item in  dict.items(): 
    freq = item.items/sum(item.items()) 
    dict2[] = freq 

但是这段代码的结果并不是我想要的。你知道怎么解决吗?

请您参考如下方法:

你想要的是在不修改大字典的键的情况下处理内部字典。将频率外包给一个函数:

def get_frequency(d): 
    total = sum(d.values()) 
    return {key: value / total * 100 for key, value in d.items()} 

然后使用 dict comprehension 将函数应用于所有子词典:

dict2 = {key: get_frequency(value) for key, value in dict1.items()} 

请注意,我添加了一个 * 100,从您的输出看来,您正在寻找 0-100 中的百分比,而不是 float 来自 0-1。

编辑:

如果您使用的是 python2 / 是整数除法,那么添加一个 float,如下所示:

return {key: float(value) / total * 100 for key, value in d.items()}