gpt4 book ai didi

Python 对嵌套字典中的值求和

转载 作者:行者123 更新时间:2023-12-01 02:29:03 32 4
gpt4 key购买 nike

我有一本字典 P,它表示字典中的字典中的字典。它看起来像这样。

P={key1:{keyA:{value1: 1, value2:3}, keyB:{value1:3,value2:4}}, 
key2:{keyA:{value1: 1, value2:3}, keyB:{value1:3,value2:4}}, key3{...:{...:}}}

我想要做的是将 value1、value 2 的每个值写入其占总人口的百分比(以基键为准)。

例如 key1 应该看​​起来像

key1:{keyA:{value1: 1/(1+3+3+4), value2:3/(1+3+3+4)}, keyB:
{value1:3/(1+3+3+4),value2:4/(1+3+3+4)}

我不确定的是如何迭代这个字典并只收集某个键的最里面的值,这样我就可以对所有值求和并将每个值除以该总和。

最佳答案

这可以使用字典理解map在单行中完成,如下所示:

#from __future__ import division # use for Python 2.x
p = {"key1":{"keyA":{"value1": 1, "value2":3}, "keyB":{"value1":3,"value2":4}}}

p = {kOuter:{kInner:{kVal: vVal/sum(map(lambda x: sum(x.values()), vOuter.values())) for kVal, vVal in vInner.iteritems()} for kInner, vInner in vOuter.iteritems()} for kOuter, vOuter in p.iteritems()}

上面的更易读的版本:

p = {
kOuter:{
kInner:{
kVal: vVal/sum(map(lambda x: sum(x.values()), vOuter.values())) for kVal, vVal in vInner.iteritems()
}
for kInner, vInner in vOuter.iteritems()
}
for kOuter, vOuter in p.iteritems()
}

输出

>>> p
>>>
{'key1': {'keyB': {'value2': 0.36363636363636365, 'value1': 0.2727272727272727}, 'keyA': {'value2': 0.2727272727272727, 'value1': 0.09090909090909091}}}

唯一的问题是重复计算总和,您可以通过计算之前的每个 key1key2... 的总和来解决这个问题字典理解并使用存储的值,如下所示:

keyTotals = {kOuter:sum(map(lambda x: sum(x.values()), vOuter.values())) for kOuter, vOuter in p.iteritems()}

然后您可以简单地通过键访问上面计算的总和,如下所示:

p = {kOuter:{kInner:{kVal: vVal/keyTotals[kOuter] for kVal, vVal in vInner.iteritems()} for kInner, vInner in vOuter.iteritems()} for kOuter, vOuter in p.iteritems()}

关于Python 对嵌套字典中的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47047549/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com