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

小例子:

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理解将功能应用于所有子词典:

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()}

关于python - 更改python中的词典字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54131323/

10-12 22:04