根据可能值列表对列表中的元素进行计数

时间:2020-01-26 17:17:21

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

但是结果:

Counter({50: 4, 75: 4, 100: 1})

不占:'0':0,'25':0

如何将选项列表传递给此功能或其他功能?

4 个答案:

答案 0 :(得分:4)

您可以使用0创建一个默认值为dict.fromkeys()的空字典,然后将其与Counter()的输出合并:

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}

d = dict.fromkeys(possible, 0)
d.update(Counter(a))

答案 1 :(得分:4)

对于我提出的解决方案,您需要定义一个列表(或其他某种可迭代的),其中包含所有可能的键(在您的情况下为整数)。

您可以构建一个新的dict,为0中找不到的键分配值counter。在这里,我们可以使用collections.Counter的一个不错的小属性表示(感谢@MykolaZotko指出这一点):

Counter对象具有一个字典接口,除了对象缺失项返回零计数而不是引发KeyError

因此代码可能是:

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])

答案 2 :(得分: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}

这是dictionary comprehension;它会创建required中存在的所有密钥,并对a中出现的密钥进行计数。 result将包含

{0: 0, 25: 0, 50: 4, 75: 4, 100: 1}

答案 3 :(得分:0)

我将仅使用dict-理解来做到这一点:

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}
相关问题