根据可能值列表对列表中的元素进行计数
Count elements in a list against a list of possible values
我有一个列表如下:
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}
我试过collections:
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
的空字典,然后将其与 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))
对于我提出的解决方案,您需要定义一个包含所有可能键(在您的情况下为整数)的列表(或其他类型的可迭代对象)。
您可以构建一个新的 dict
,为您在 counter
中找不到的键分配值 0
。在这里我们可以使用 collections.Counter
的一个很好的 属性 说(感谢@MykolaZotko 指出):
Counter
objects have a dictionary interface except that they return a zero count for missing items instead of raising a 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])
我会用 dict
-comprehension 的方式来做到这一点:
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}
这是一个dictionary comprehension;它创建 required
中存在的所有键并计算它们在 a
中出现的次数(如果有的话)。 result
将包含
{0: 0, 25: 0, 50: 4, 75: 4, 100: 1}
我有一个列表如下:
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}
我试过collections:
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
的空字典,然后将其与 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))
对于我提出的解决方案,您需要定义一个包含所有可能键(在您的情况下为整数)的列表(或其他类型的可迭代对象)。
您可以构建一个新的 dict
,为您在 counter
中找不到的键分配值 0
。在这里我们可以使用 collections.Counter
的一个很好的 属性 说(感谢@MykolaZotko 指出):
Counter
objects have a dictionary interface except that they return a zero count for missing items instead of raising aKeyError
.
所以代码可以是:
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])
我会用 dict
-comprehension 的方式来做到这一点:
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}
这是一个dictionary comprehension;它创建 required
中存在的所有键并计算它们在 a
中出现的次数(如果有的话)。 result
将包含
{0: 0, 25: 0, 50: 4, 75: 4, 100: 1}