我有一个类似[a] [b] =(c)的字典,例如:
{'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}
我希望能够做的是通过[b]键搜索并对属于它的相应c求和。所以我得到以下输出:
1:9,2:6,3:6 ......等等。
这是否需要重组字典?
答案 0 :(得分:2)
您可以使用collections.defaultdict
迭代作为词典的字典值并总结每个键的值。然后,您只需访问结果字典,找出每个密钥的总和值,而无需搜索:
from collections import defaultdict
d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}
result = defaultdict(int)
for i in d.values():
for j in i:
result[j] += i[j]
print(result)
# defaultdict(<class 'int'>, {1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})
>>> print(result[1])
9
答案 1 :(得分:0)
我假设你有这样的词典:
d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}}
现在我们必须编写一个函数,它将获取一个参数(一个整数),并在所有内部字典中对此整数的所有值求和。
def calc(b):
result = 0
for val in d.values():
if b in val:
result += val[b]
答案 2 :(得分:0)
如果你需要的只是总数,那么你可以sum
使用以下方法提升所有值:
>>> b = 2
>>> sum(a.get(b, 0) for a in d.values())
6
如果您想要所有b
s,那么您使用行为类似于collections.Counter()
的{{1}}来完成所有繁重的工作:
dict
但如果你真的很挑剔并想要一个>>> from collections import Counter
>>> sum((Counter(a) for a in d.values()), Counter())
Counter({1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})
:
dict