我有一个包含重复值的列表,我想使用字典理解来对它们进行计数
这是我最初的尝试
number_list = [1,1,2,2,3,3,4,4,5,5]
number_count_dict = {i:1 for i in number_list}
{k: (number_count_dict[k]+1 if k in number_count_dict() else 1) for k in number_list}
是否有一种无需初始化字典即可实现这一目标的方法?
答案 0 :(得分:0)
请以以下示例来回答您的问题:
numbers = [5,3,3,4,2]
,让我们说说您是否想将其变成字典,其中的键是索引,值是列表中的元素。然后,您可以输入类似这样的内容:
{index:numbers[index] for index in range(0,len(numbers))}
结果如下:
{0: 5, 1: 3, 2: 3, 3: 4, 4: 2}
答案 1 :(得分:0)
这只会计算重复次数(> 1)
>>> from collections import Counter
>>> x=[1,1,2,2,3,3,4,4,5,5]
>>> {i:j for i,j in Counter(x).items() if i>1}
{2: 2, 3: 2, 4: 2, 5: 2}
答案 2 :(得分:0)
您的问题遗漏了几个要点。您要在字典中使用的最小和最大数字是多少?您是否要对数字0进行计数?您可以使用Counter类吗?
#1:使用Counter对从0到len(数字列表)的项目进行计数,包括计数为0的项目。
>>> from collections import Counter
>>> number_list = [1,1,2,2,3,3,4,4,5,5]
>>> count = Counter(number_list)
>>> number_count_dict = {i:(count[i] if i in number_list else 0) for i in range(len(number_list))}
{0: 0, 1: 2, 2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 0, 8: 0, 9: 0}
#2:使用计数器对列表中从最低编号到最高编号的项目进行计数,包括计数为0的项目。
>>> from collections import Counter
>>> number_list = [2,2,3,3,4,4,5,5,7,7]
>>> count = Counter(number_list)
>>> number_count_dict = {i:(count[i] if i in number_list else 0) for i in range(min(number_list),max(number_list)+1)}
{2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 2}
#3:使用计数器对列表中的项目进行计数。
>>> from collections import Counter
>>> number_list = [1,1,2,2,3,3,4,4,5,5]
>>> count = Counter(number_list)
>>> number_count_dict = {i:count[i] for i in set(number_list)}
{1: 2, 2: 2, 3: 2, 4: 2, 5: 2}
#4:不使用Counter计数从0到len(number_list)的项目,包括计数为0的项目。
>>> number_list = [1,1,2,2,3,3,4,4,5,5]
>>> number_count_dict = {i:number_list.count(i) for i in range(len(number_list))}
{0: 0, 1: 2, 2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 0, 8: 0, 9: 0}
#5:不使用计数器对列表中从最低编号到最高编号的项目进行计数,包括计数为0的项目。
>>> number_list = [2,2,3,3,4,4,5,5,7,7]
>>> number_count_dict = {i:number_list.count(i) for i in range(min(number_list),max(number_list)+1)}
{2: 2, 3: 2, 4: 2, 5: 2, 6: 0, 7: 2}
#6:不使用Counter对列表中的项目进行计数。
>>> number_list = [1,1,2,2,3,3,4,4,5,5]
>>> number_count_dict = {i:number_list.count(i) for i in set(number_list)}
{1: 2, 2: 2, 3: 2, 4: 2, 5: 2}
#7:使用defaultdict和for循环的奖励。
from collections import defaultdict
number_list = [1,1,2,2,3,3,4,4,5,5]
number_count_dict = defaultdict(int)
for i in number_list:
number_count_list[i] += 1