词典:如何计算列表中值的频率 - Python3
Dictionary: How to count frequency of values in list - Python3
我有一个字典,每个键都有多个值。因此,我使用一个列表作为值。现在我想计算一个值在此值列表中出现的频率。
例如,我有以下字典:
dic = {}
dic.setdefault(„Sam“, []).append(„Smith“)
dic.setdefault(„Sam“, []).append(„Miller“)
dic.setdefault(„Sam“, []).append(„Smith“)
所以
for k, v in dic.items():
print(k,v)
结果:
Sam [Smith, Miller, Smith]
现在我想计算每个值出现的频率并在值本身旁边打印频率。我希望输出如下所示:
Smith: 2, Miller: 1
为此,我尝试了以下代码但没有成功:
D = defaultdict(list)
for i, item in enumerate(mylist):
D[item].append(i)
D = {k: len(v) for k, v in D.items()}
print(D)
此代码适用于像这样的简单列表:
mylist = [10, 20, 30, 10, 30]
对于这种列表,上面的代码将产生我所期望的结果:
{10: 2, 30:2, 20:1}
但是它不适用于包含值的列表。相反,当在第二行中使用“dic”而不是“mylist”时,它会显示以下错误消息:
TypeError:无法散列的类型:'list'
如果有人能提供帮助就太好了。
这实际上是创建 "Count" 功能的一种非常有趣的方式。问题是您的代码对列表中的项目进行计数,因此将字典传递给它是行不通的。相反,您应该传递 dic.items()
中的值。如果我们使用您拥有的:
for k, v in dic.items():
D = defaultdict(list)
for i, item in enumerate(v):
D[item].append(i)
D = {k: v for k, v in D.items()}
print(k, D)
此外,请查看 collections.Counter
,这是 Count 的标准库实现。
from collections import Counter
for k, v in dic.items():
print(k, Counter(v))
我有一个字典,每个键都有多个值。因此,我使用一个列表作为值。现在我想计算一个值在此值列表中出现的频率。 例如,我有以下字典:
dic = {}
dic.setdefault(„Sam“, []).append(„Smith“)
dic.setdefault(„Sam“, []).append(„Miller“)
dic.setdefault(„Sam“, []).append(„Smith“)
所以
for k, v in dic.items():
print(k,v)
结果:
Sam [Smith, Miller, Smith]
现在我想计算每个值出现的频率并在值本身旁边打印频率。我希望输出如下所示:
Smith: 2, Miller: 1
为此,我尝试了以下代码但没有成功:
D = defaultdict(list)
for i, item in enumerate(mylist):
D[item].append(i)
D = {k: len(v) for k, v in D.items()}
print(D)
此代码适用于像这样的简单列表:
mylist = [10, 20, 30, 10, 30]
对于这种列表,上面的代码将产生我所期望的结果:
{10: 2, 30:2, 20:1}
但是它不适用于包含值的列表。相反,当在第二行中使用“dic”而不是“mylist”时,它会显示以下错误消息:
TypeError:无法散列的类型:'list'
如果有人能提供帮助就太好了。
这实际上是创建 "Count" 功能的一种非常有趣的方式。问题是您的代码对列表中的项目进行计数,因此将字典传递给它是行不通的。相反,您应该传递 dic.items()
中的值。如果我们使用您拥有的:
for k, v in dic.items():
D = defaultdict(list)
for i, item in enumerate(v):
D[item].append(i)
D = {k: v for k, v in D.items()}
print(k, D)
此外,请查看 collections.Counter
,这是 Count 的标准库实现。
from collections import Counter
for k, v in dic.items():
print(k, Counter(v))