gpt4 book ai didi

python - 在 python 中使用带有嵌套字典的计数器

转载 作者:太空狗 更新时间:2023-10-29 22:28:50 26 4
gpt4 key购买 nike

我有一个像这样的 python 字典列表:

[
{
"25-34": {
"Clicks": 10
},
"45-54": {
"Clicks": 2
},

},
{
"25-34": {
"Clicks": 20
},
"45-54": {
"Clicks": 10
},

}
]

我怎样才能得到列表中每个字典中的键的总和,这样我就有:

{
"25-34": {
"Clicks": 30
},
"45-54": {
"Clicks": 12
},

}

我尝试使用 Counter() 但当列表中的 dicts 是扁平的但使用像上面这样的嵌套字典时它很容易工作,它给出了这个错误:

    /usr/lib/python2.7/collections.pyc in update(self, iterable, **kwds)
524 self_get = self.get
525 for elem, count in iterable.iteritems():
--> 526 self[elem] = self_get(elem, 0) + count
527 else:
528 super(Counter, self).update(iterable) # fast path when counter is empty

TypeError: unsupported operand type(s) for +: 'dict' and 'dict'

我怎样才能实现我上面描述的求和。

注意:我添加了clicks 只是为了示例。嵌套的字典可以没有任何键,另一个更清楚的例子:

[
{
"25-34": {
"Clicks": 10,
"Visits": 1
},
"45-54": {
"Clicks": 2,
"Visits": 2
},

},
{
"25-34": {
"Clicks": 20,
"Visits": 3
},
"45-54": {
"Clicks": 10,
"Visits": 4
},

}
]

输出:

{
"25-34": {
"Clicks": 30,
"Visits": 4
},
"45-54": {
"Clicks": 12,
"Visits": 6
},

}

最佳答案

从你的编辑来看,听起来你只是想通过父字典对所有子字典的求和:

In [9]: counts = Counter()

In [10]: for dd in data:
...: for k,v in dd.items():
...: counts[k] += sum(v.values())
...:

In [11]: counts
Out[11]: Counter({'25-34': 30, '45-54': 12})

从根本上说,这是一个笨重的数据结构。

好的,考虑到您的上次更新,我认为最简单的方法是使用带有 Counter 工厂的 defaultdict:

In [17]: from collections import Counter, defaultdict

In [18]: counts = defaultdict(Counter)

In [19]: for dd in data:
...: for k, d in dd.items():
...: counts[k].update(d)
...:

In [20]: counts
Out[20]:
defaultdict(collections.Counter,
{'25-34': Counter({'Clicks': 30, 'Visits': 4}),
'45-54': Counter({'Clicks': 12, 'Visits': 6})})

关于python - 在 python 中使用带有嵌套字典的计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46233233/

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