How do I count occurences of a unique label?
本问题已经有最佳答案,请猛点这里访问。
我有一个文档,它由如下标签组成:
1 2 3 4 5 6 7 | 201 202 205 201 203 204 201 |
如果我想计算每个标签的出现次数并将其打印出来,如何在Python中这样做?
我想得到的是:
1 2 3 | 201: 3 202: 1 204: 1 |
使用来自
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | >>> from collections import Counter >>> >>> s '202 205 201 203 204 201 ' >>> s = ''' 201 202 205 201 203 204 201 ''' >>> c=Counter() >>> for d in s.rstrip().split(): c[d] += 1 >>> c Counter({'201': 3, '205': 1, '204': 1, '203': 1, '202': 1}) |
或者按照关凯文的建议:
1 | >>> c = Counter(s.rstrip().split()) |
编辑:
我认为这可以进一步简单地做到,这样:
1 2 3 4 5 6 7 8 9 10 11 12 | >>> l = s.rstrip().split() >>> l ['201', '202', '205', '201', '203', '204', '201'] >>> c = [l.count(x) for x in l] >>> >>> c [1, 1, 1, 3, 1] >>> >>> d = dict(zip(l,c)) >>> >>> d {'205': 1, '201': 3, '203': 1, '204': 1, '202': 1} |
如果你喜欢一个线性表达,那么:
1 2 3 4 5 6 7 | >>> l = s.rstrip().split() >>> >>> dict(zip(l,map(l.count, l))) {'205': 1, '204': 1, '201': 3, '203': 1, '202': 1} >>> >>> dict(zip(set(l),map(l.count, set(l)))) {'205': 1, '201': 3, '203': 1, '204': 1, '202': 1} |
试试这个:
1 2 3 4 5 6 | import itertools with open("your_document") as f: lines = sorted(map(str.int, f.read().strip().split())) for x,y in itertools.groupby(lines): print x, list(y) |
如果您的文档像GB一样大
1 2 3 4 5 | import collections my_dict = collections.defaultdict(int) with open("your_document") as f: for line in f: my_dict[line] += 1 |
输出:
1 2 | >>> my_dict defaultdict(<type 'int'>, {'201': 2, '203': 1, '202': 1, '205': 1, '204': 1}) |
没有集合或itertools:
1 2 3 4 5 | my_dict = {} with open("your_document") as f: for line in f: line = line.strip() my_dict[line] = my_dict.get(line, 0) + 1 |
您可以使用
1 2 3 4 5 | >>> with open('text.txt') as f: ... c = Counter(map(str.strip, f.readlines())) ... print(c) ... Counter({'201': 3, '205': 1, '202': 1, '204': 1, '203': 1}) |