我有以下元组。我想构建一个输出如输出中所述输出的字符串。我想要计算所有对应于'a'的元素,即有多少k1出现了'a'等等。是什么最简单的方法
a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
输出应该在字符串output =“”
中 a k1 3
a k2 1
b k1 1
b k2 3
c k3 1
c k4 1
答案 0 :(得分:6)
使用collections
中的Counter
课程:
>>> a = [('a', 'k1'), ('b', 'k2'), ('a', 'k2'), ('a', 'k1'), ('b', 'k2'), ('a', 'k1'), ('b', 'k2'), ('c', 'k3'), ('c', 'k4')]
>>> from collections import Counter
>>> c = Counter(a)
Counter({('b', 'k2'): 3, ('a', 'k1'): 3, ('a', 'k2'): 1, ('c', 'k3'): 1, ('c', 'k4'): 1})
您可以使用c.items()
来重复计算:
>>> for item in c.items():
... print(item)
...
(('a', 'k2'), 1)
(('c', 'k3'), 1)
(('b', 'k2'), 3)
(('a', 'k1'), 3)
(('c', 'k4'), 1)
上面的代码是Python 3. Counter
类是Python 2.7中的新类。您现在可以按所需顺序重新排列项目,并在需要时将它们转换为字符串。
答案 1 :(得分:2)
您可以使用defaultdict轻松完成添加部分。默认dict的工作方式类似于普通字典,但它具有空键存储的默认值,因此您可以在迭代数据集时轻松增加计数器。
a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
from collections import defaultdict
b = defaultdict(int)
for item in a:
b[item] += 1
print b
defaultdict(<type 'int'>, {('a', 'k2'): 1, ('c', 'k3'): 1, ('b', 'k2'): 3, ('a', 'k1'): 3, ('c', 'k4'): 1})
对于漂亮的打印,只需迭代结果数据并按照您想要的方式打印。
for key, value in b.iteritems():
print '%s %s %s' % (key[0], key[1], value)