Python 计数,然后从电子邮件列表中删除重复项

Python 计数,然后从电子邮件列表中删除重复项,python,count,duplicate-removal,Python,Count,Duplicate Removal,我有一个长长的电子邮件地址列表(8000个),按字母顺序排列,但也有重复的 使用python—如何计算唯一电子邮件的重复次数(重复次数),并在维护电子邮件的一个实例时从列表中删除重复的重复电子邮件 示例列表: a@sample.com b@sample.com b@sample.com b@sample.com c@sample.com c@sample.com 结果: a@sample.com (1) b@sample.com (3) c@sample.com (2) 我在网上搜索过,但只

我有一个长长的电子邮件地址列表(8000个),按字母顺序排列,但也有重复的

使用python—如何计算唯一电子邮件的重复次数(重复次数),并在维护电子邮件的一个实例时从列表中删除重复的重复电子邮件

示例列表:

a@sample.com
b@sample.com
b@sample.com
b@sample.com
c@sample.com
c@sample.com
结果:

a@sample.com (1)
b@sample.com (3)
c@sample.com (2)

我在网上搜索过,但只找到删除重复数字、字典和元组的方法。

使用
itertools.groupby()
按字母顺序排序:-

 >>>l = list of emails 
 >>>[(key, sum(1 for _ in group)) for key, group in groupby(sorted(l))]

[('a@sample.com', 1), ('b@sample.com', 3), ('c@sample.com', 2)]
使用
collections.Counter
对重复的项目进行计数

>>>from collections import Counter
>>>d = Counter(['a@sample.com',
>>>'b@sample.com',
>>>'b@sample.com',
>>>'b@sample.com',
>>>'c@sample.com',
>>>'c@sample.com'])
>>>d 
输出:-

Counter({'b@sample.com': 3, 'c@sample.com': 2, 'a@sample.com': 1})
它类似于(或以最简单的方式)

或者使用
dict.get
对于l中的i:
d[i]=d.get(i,0)+1

您可以使用
集合。计数器

>>> from collections import Counter
>>> my_email
['a@sample.com', 'b@sample.com', 'b@sample.com', 'b@sample.com', 'c@sample.com', 'c@sample.com\n']
>>> Counter(my_email)
Counter({'b@sample.com': 3, 'c@sample.com': 2, 'a@sample.com': 1})
如果您想按顺序排列:

>>> sorted(Counter(my_email).items())
[('a@sample.com', 1), ('b@sample.com', 3), ('c@sample.com', 2)]
您可以这样打印:

>>> for x in sorted(Counter(my_email).items()):
...     print x[0],x[1]   # if you sung python 3 print(x[0],x[1])
... 
a@sample.com 1
b@sample.com 3
c@sample.com 2

需要进行后续排序。但是,在内置排序之前,8000个条目算不上什么。如果要根据键进行排序,那么
调用是无用的,dict总是有唯一的键。是的,它是无用的
d[i]=d.get(i,0)+1是更好的习惯用法。@Guage请检查答案。
>>> for x in sorted(Counter(my_email).items()):
...     print x[0],x[1]   # if you sung python 3 print(x[0],x[1])
... 
a@sample.com 1
b@sample.com 3
c@sample.com 2