4

我有以下元组。我想构建一个字符串,其输出如输出中所述。我想计算与'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
4

2 回答 2

6

使用Counter来自的类collections

>>> 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 中的新类。您现在可以按所需顺序重新排列项目,并在需要时将它们转换为字符串。

于 2012-06-29T11:18:43.377 回答
2

您可以使用defaultdict轻松完成添加部分。默认字典像普通字典一样工作,除了它具有空键存储的默认值,因此您可以在迭代数据集时轻松增加计数器。

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)
于 2012-06-29T11:17:39.857 回答