计算列表列表中字符串的出现

时间:2019-06-19 03:46:16

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

任何帮助都会有用。谢谢。

2 个答案:

答案 0 :(得分:4)

在这里使用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()

答案 1 :(得分:0)

当前,您正在执行以下操作:

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)