繁体   English   中英

更改python中的词典字典

[英]change a dictionary of dictionaries in 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

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

您想要的是处理内部字典,而无需修改大字典的键。 将频率外包给一个函数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM