簡體   English   中英

計算列表列表中字符串的出現

[英]Count occurrence of strings in list of lists

我想計算一個字符串在另一個列表中的一個列表中出現的次數,並將其存儲在字典列表中,其中每個字典都有一個列表計數。 例如

list = [['Sam','John','Alex','Sam','Alex'],['Max','Sam','Max']...]

我希望我的字典清單像這樣:

count_list = [{'Sam':2,'Alex':2,'John':1}, {'Max':2, 'Sam':1}..] 

我正在遍歷每個列表以計算每個字符串出現的次數,並將每個結果添加到dict。 但是我每次都會得到不同的結果,而不是正確的值。

count_list = []
for l in list :
    d = {}
    for str in l:
        if str not in d:
            d[str] = l.count(str)
            count_list.append(d)

任何幫助都是有用的。謝謝。

在這里使用collections.Counter()會更容易:

>>> from collections import Counter
>>> lst = [["Sam", "John", "Alex", "Sam", "Alex"], ["Max", "Sam", "Max"]]
>>> list(map(Counter, lst))
[Counter({'Sam': 2, 'Alex': 2, 'John': 1}), Counter({'Max': 2, 'Sam': 1})]

如果更容易理解,您也可以使用列表推導而不是map()

>>> [Counter(l) for l in lst]
[Counter({'Sam': 2, 'Alex': 2, 'John': 1}), Counter({'Max': 2, 'Sam': 1})]

注意: Counterdict的子類,因此您可以將它們像普通字典一樣對待。

您也可以始終將其轉換為dict()

>>> [dict(Counter(l)) for l in lst]
[{'Sam': 2, 'John': 1, 'Alex': 2}, {'Max': 2, 'Sam': 1}]

您也不應使用list作為變量名,因為它會遮蓋內置函數list()

當前,您正在執行以下操作:

count_list = []
for l in list :
    d = {}
    for str in l:
        if str not in d:
            d[str] = l.count(str)
            count_list.append(d)

請注意,您要為子列表中的每個字符串添加字典,而不是為每個子列表添加一個字典。

執行以下操作應解決該問題:

count_list = []
for l in list :
    d = {}
    for str in l:
        if str not in d:
            d[str] = l.count(str)
    count_list.append(d)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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