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
上的所有问题。