[英]How to count frequencies/occurences of all values within a string
我需要對列表中的所有電子郵件進行計數,但是其中一些電子郵件與|
合並在一起。 象征。 這些需要拆分,並且拆分后需要對電子郵件進行計數,以避免獲得不准確或低頻率的計數。
我有一個類似這樣的列表:
test = ['abc@gmail.com', 'xyz@jad.com|abc@gmail.com', 'asd@ajf.com|abc@gmail.com', 'asdf@adh.com', 'xyz@jad.com']
我執行了一組拆分操作,當我拆分時,pipe 在該位置被雙引號替換,因此我將雙引號替換為單引號,因此我將所有 email id 括在單引號中。
# convert list to a string
test_str = str(test)
# apply string operation to split by separator '|'
test1 = test_str.split('|')
print(test1)
--> OUTPUT of above print statement: ["['abc@gmail.com', 'xyz@jad.com", "abc@gmail.com', 'asd@ajf.com", "abc@gmail.com', 'asdf@adh.com', 'xyz@jad.com']"]
test2 = str(test1)
test3 = test2.replace('"','')
print(test3)
--> OUTPUT of above print statement: [['abc@gmail.com', 'xyz@jad.com', 'abc@gmail.com', 'asd@ajf.com', 'abc@gmail.com', 'asdf@adh.com', 'xyz@jad.com']]
我現在如何獲得所有電子郵件的計數? 這本質上是一個字符串,如果它是一個列表,我可以使用 collections.Counter 輕松獲得計數。
我想要一個類似下面列出的列表,其中包含 email 和頻率降序排列的計數
['abc@gmail.com': 3, 'xyz@jad.com': 2, 'asd@ajf.com': 1, 'asdf@adh.com': 1]
謝謝您的幫助!
您可以將collections.Counter
與生成器表達式一起使用,該生成器表達式迭代字符串的輸入列表,然后通過拆分字符串來迭代電子郵件的子列表。 使用most_common
方法來確保計數的降序:
from collections import Counter
dict(Counter(e for s in test if s for e in s.split('|')).most_common())
這將返回:
{'abc@gmail.com': 3, 'xyz@jad.com': 2, 'asd@ajf.com': 1, 'asdf@adh.com': 1}
遍歷列表並在每個字符串上調用counter.update
怎么樣? 像這樣:
test = ['abc@gmail.com', 'xyz@jad.com|abc@gmail.com', 'asd@ajf.com|abc@gmail.com', 'asdf@adh.com', 'xyz@jad.com']
c = Counter()
for email_str in test:
if email_str:
c.update(email_str.split('|'))
res = c.most_common()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.