我有一个像这个小例子的字典:
小例子:
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()}
