我有一个字典字典,像这个小例子:
小例子:
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/