簡體   English   中英

如何計算字符串中所有值的頻率/出現次數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM