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

Bel*_*a92 1 python dictionary nested-lists

我想计算一个字符串在另一个列表中出现的次数,并将其存储在字典列表中,其中每个字典都有一个列表的计数。前任,

list = [['Sam','John','Alex','Sam','Alex'],['Max','Sam','Max']...]
Run Code Online (Sandbox Code Playgroud)

我希望我的字典列表如下:

count_list = [{'Sam':2,'Alex':2,'John':1}, {'Max':2, 'Sam':1}..] 
Run Code Online (Sandbox Code Playgroud)

我正在迭代每个列表以计算每个字符串出现的次数并将每个结果添加到字典中。但我最终每次都会得到不同的结果,而不是正确的值。

count_list = [{'Sam':2,'Alex':2,'John':1}, {'Max':2, 'Sam':1}..] 
Run Code Online (Sandbox Code Playgroud)

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

Roa*_*ner 5

在这里使用会更容易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})]
Run Code Online (Sandbox Code Playgroud)

您还可以使用列表理解而不是使用map()if 更容易理解:

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

注意: Counter是 的子类dict,因此您可以像普通字典一样对待它们。

dict()如果您愿意,也可以随时投射到:

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

您也不应该将其用作list变量名,因为它会隐藏内置函数list()