Python元组操作和计数

Python元组操作和计数,python,string,tuples,Python,String,Tuples,我有下面的元组。我想构建一个字符串,该字符串按照输出中的说明进行输出。我想计算与“a”对应的所有元素,即,有多少个k1出现了w.r.t“a”,等等。最简单的方法是什么 a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')] 输出应为字符串Output=“” 你可以很容易地做加法部分。默认dict的工作原理与普通字典类似,只是它有一个空键存储的默认

我有下面的元组。我想构建一个字符串,该字符串按照输出中的说明进行输出。我想计算与“a”对应的所有元素,即,有多少个k1出现了w.r.t“a”,等等。最简单的方法是什么

a=[('a','k1'),('b','k2'),('a','k2'),('a','k1'),('b','k2'),('a','k1'),('b','k2'),('c','k3'),('c','k4')]
输出应为字符串Output=“”


你可以很容易地做加法部分。默认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})
使用
集合中的类

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

上面的代码是Python3。
计数器
类在Python 2.7中是新的。现在,您可以按所需顺序重新排列项目,并根据需要将其转换为字符串。

collections.Counter更适合here@gnibbler:计数器如何更适合。这也非常适合。对于这两种情况下的第二次输出,我将使用计数器
计数器
有什么优点计算唯一的信息位。因此,如果您只想计算发生次数,那么是的,
计数器
更适合。@Rajeev,这是defaultdict的常见模式,它被添加到集合模块中并被称为计数器。当然,这有一个性能优势,但代码中也清楚地显示出某些东西正在被计算
>>> 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})
>>> for item in c.items():
...     print(item)
... 
(('a', 'k2'), 1)
(('c', 'k3'), 1)
(('b', 'k2'), 3)
(('a', 'k1'), 3)
(('c', 'k4'), 1)