我想计算一个字符串在另一个列表中的一个列表中出现的次数,并将其存储在字典列表中,其中每个字典都有一个列表计数。 例如,
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)
任何帮助都会有用。谢谢。
答案 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})]
注意::Counter
是dict
的子类,因此您可以将它们像普通词典一样对待。
如果愿意,您也可以始终投射到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)