我在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
仅用于示例。嵌套的dict可以不包含任何键,另一个例子可以使它更清晰:
[
{
"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
},
}
从您的编辑看来,您似乎只是尝试通过父dict将所有子dict的值求和:
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})
从根本上讲,这是一个笨拙的数据结构。
好的,考虑到您的最新更新,我认为最简单的方法是defaultdict
与Counter
工厂一起使用:
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})})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句