Python元组操作和计数

时间:2012-06-29 11:14:22

标签: python string tuples

我有以下元组。我想构建一个输出如输出中所述输出的字符串。我想要计算所有对应于'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

2 个答案:

答案 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)