更改python中的词典

2024-04-26 23:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

小例子:

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

但是这个代码的结果不是我想要的。你知道怎么修吗?你知道吗


Tags: 代码in命令for字典items数字item
2条回答

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

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的百分比,而不是来自0-1float。你知道吗

编辑:

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

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

您可以执行以下操作:

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

result = {}
for key, d in dct.items():
    total = sum(d.values())
    result[key] = {k : a / total for k, a in d.items()}

print(result)

输出

{1: {'C': 0.21050328227571116, 'T': 0.2775346462436178, 'G': 0.2012399708242159, 'A': 0.31072210065645517}, 2: {'C': 0.22447118891320203, 'T': 0.25018234865062, 'G': 0.20076586433260393, 'A': 0.32458059810357404}}

相关问题 更多 >