我有很长的电子邮件地址列表(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)
我在线搜索过,但只找到删除重复数字,词典和元组的方法。
答案 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