以字典理解来创建字典

时间:2020-02-08 20:11:58

标签: python dictionary list-comprehension

我有一个包含重复值的列表,我想使用字典理解来对它们进行计数

这是我最初的尝试

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}

是否有一种无需初始化字典即可实现这一目标的方法?

3 个答案:

答案 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