我在Python 2.7中得到了这个
l = [('a', 1), ('a', 2), ('b', 3), ('b', 4)]
如何获得计数器c:
c = Counter({'a': 3, 'b': 7 }]
如果可能的话,我更愿意使用理解,或者尽可能快地使用理解。
答案 0 :(得分:1)
只需迭代并添加,Counter
自动处理!
In [5]: l = [('a', 1), ('a', 2), ('b', 3), ('b', 4)]
...:
In [6]: c = Counter()
In [7]: for k, v in l:
...: c[k] += v
...:
In [8]: c
Out[8]: Counter({'a': 3, 'b': 7})
这就是Counter
设计使用的方式。
答案 1 :(得分:1)
另一种方法:
>>> from operator import add
>>> reduce(add, map(lambda x: Counter({x[0]: x[1]}), l))
Counter({'b': 7, 'a': 3})
或sum
:
>>> sum(map(lambda x: Counter({x[0]: x[1]}), l), Counter())
Counter({'b': 7, 'a': 3})
答案 2 :(得分:0)
按键排序和分组;将每个键的值相加;添加键:sum(values)到字典。
>>> g = {k:sum(map(value, group)) for k, group in itertools.groupby(a, key = key)}
>>> g
{'a': 3, 'b': 7}
>>>
或
setup
你真的不需要收藏。计数器