Python 根据可能值列表对列表中的元素进行计数
我的清单如下:Python 根据可能值列表对列表中的元素进行计数,python,list,counter,Python,List,Counter,我的清单如下: a = [50, 75, 75, 100, 50, 50, 75, 50, 75] 可能的值为:0,25,50,75和100 在此基础上,我想将字典中的值分组为: result= {'0':0,'25':0,'50':4,'75':4,'100':1} 我尝试过收藏: import collections a = [50, 75, 75, 100, 50, 50, 75, 50, 75] counter=collections.Counter(a) 但结果是: Counte
a = [50, 75, 75, 100, 50, 50, 75, 50, 75]
可能的值为:0,25,50,75和100
在此基础上,我想将字典中的值分组为:
result= {'0':0,'25':0,'50':4,'75':4,'100':1}
我尝试过收藏:
import collections
a = [50, 75, 75, 100, 50, 50, 75, 50, 75]
counter=collections.Counter(a)
但结果是:
Counter({50: 4, 75: 4, 100: 1})
不考虑“0”:0,“25”:0
如何将选项列表传递给此函数或其他函数 您可以使用
dict.fromkeys()
创建默认值为0
的空字典,然后将其与计数器()合并
输出:
from collections import Counter
a = [50, 75, 75, 100, 50, 50, 75, 50, 75]
possible =[0,25,50,75, 100]
{**dict.fromkeys(possible, 0), **Counter(a)}
# {0: 0, 25: 0, 50: 4, 75: 4, 100: 1}
或
对于我建议的解决方案,您需要定义一个列表(或其他类型的iterable),其中包含所有可能的键(在您的示例中为整数) 您可以构建一个新的
dict
,为计数器中找不到的键分配值0
。在这里,我们可以使用它的一个很好的小属性(感谢@MykolaZotko指出这一点):
计数器
对象有一个字典接口,除了它们为缺少的项返回零计数,而不是引发键错误
因此,代码可以是:
import collections
possible_keys = [0, 25, 50, 75, 100]
data = [50, 75, 75, 100, 50, 50, 75, 50, 75]
counter = collections.Counter(data)
我们可以创建一个新的dict
,其中缺少的元素为零:
dict_with_zeros = {
k: counter[k]
for k in possible_keys}
或者,如果您只需要打印计数器,而不实际创建带有零的新的dict
:
for k in possible_keys:
print(k, counter[k])
我会用下面的方法来做:
a = [50, 75, 75, 100, 50, 50, 75, 50, 75]
possible = [0,25,50,75,100]
result = {p:0 for p in possible}
for i in a:
result[i] += 1
print(result) # {0: 0, 25: 0, 50: 4, 75: 4, 100: 1}
您可以使用这些值创建一个新的字典,而无需像下面这样使用其他导入:
a = [50, 75, 75, 100, 50, 50, 75, 50, 75]
required = [0,25,50,75,100]
result = {item:a.count(item) for item in required}
这是一个,;它创建required
中存在的所有键,并统计它们在a
中出现的次数(如果有)<代码>结果
将包含
{0: 0, 25: 0, 50: 4, 75: 4, 100: 1}
“**”代表什么?@LuisRamonRamirezRodriguez,字典解包。请参阅3.5或更高版本(我认为)中的可用性。请尝试
{k:counter[k]for k in可能的_键}
{0: 0, 25: 0, 50: 4, 75: 4, 100: 1}