Python 删除重复项后显示计数
我不确定我是否应该为此打开数据库,但我很有兴趣看到这个问题的另一个解决方案 我在一个文本文件中有几行文本,比如Python 删除重复项后显示计数,python,duplicates,Python,Duplicates,我不确定我是否应该为此打开数据库,但我很有兴趣看到这个问题的另一个解决方案 我在一个文本文件中有几行文本,比如 Bill Bill Pete Mary Mary Mary Bill (2) Mary (3) Pete (1) 我不想要复制品,就这样做到了 f = open('cgi/log/ipAddressList.log', 'r') uniquelines = set(f.read().split("\n")) for line in uniquelines: print li
Bill
Bill
Pete
Mary
Mary
Mary
Bill (2)
Mary (3)
Pete (1)
我不想要复制品,就这样做到了
f = open('cgi/log/ipAddressList.log', 'r')
uniquelines = set(f.read().split("\n"))
for line in uniquelines:
print line
f.close()
这让我
Bill
Mary
Pete
但是现在我想统计一下它们在文本文件中出现了多少个实例,比如
Bill
Bill
Pete
Mary
Mary
Mary
Bill (2)
Mary (3)
Pete (1)
有什么python魔法可以做到这一点吗?
提前谢谢
编辑:
酷,我查了一下收藏品,发现
f = open('cgi/log/ipAddressList.log', 'r')
c = collections.Counter( f.read().split("\n") )
uniquelines = set(c)
for line in uniquelines:
print line + '%s (%d)' % (line, c[line])
f.close()
刚刚注意到关于readlines()的新评论,也非常感谢
这是我的字典解决方案
f = open('cgi/log/ipAddressList.log', 'r')
l = list( f.readlines() )
d = {}
for i in set(l):
d[i] = l.count(i)
print d
可能会做你想做的事
例如:
>>> from collections import Counter
>>> lst = ['Bill', 'Bill', 'Pete', 'Mary', 'Pete']
>>> c = Counter(lst)
>>> c
Counter({'Pete': 2, 'Bill': 2, 'Mary': 1})
>>> for k,v in c.items():
... print(k,v)
...
Pete 2
Bill 2
Mary 1
您可以通过以下方式将此应用于您的案例:
Counter(f.read().split("\n"))
当您考虑使用Python进行计数时,您(几乎)一直都应该考虑字典。下面是一个可能的解决方案:
people = {}
for person in f:
people[person] = people.get(person, 0) + 1
for person in people:
print '%s (%d)' % person
这里可能不需要这个,但最好使用
f.readlines()
,而不是自己进行拆分(f.read().split(“\n”)
)。阅读有关collections.defaultdict
。然后重新编写您的问题,以包括defaultdict
上的所有问题。