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

时间:2014-12-02 12:30:10

标签: 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)

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

2 个答案:

答案 0 :(得分:1)

使用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})

类似于(或以最简单的方式)

d = {}
for i in l: # l = list or all emails.
    if i in d:
        d[i] += 1
    else:
        d[i] = 1

或使用dict.get     因为我在l:         d [i] = d.get(i,0)+ 1

答案 1 :(得分:0)

您可以使用collections.Counter

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