首页 > 解决方案 > 在字典理解中创建字典

问题描述

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

这是我最初的尝试

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}

有没有办法在不初始化字典的情况下实现这一点?

标签: pythondictionarylist-comprehension

解决方案


你的问题遗漏了几个要点。您想要字典中的最小和最大数字是多少?你想计算 0 的数字吗?你可以使用 Counter 类吗?

#1:使用 Counter 计算从 0 到 len(number_list) 的项目,包括计数为 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:使用Counter从列表中从最低数到最高数计算项目,包括计数为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:计数从 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:计算列表中的项目不使用计数器。

>>> 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:奖励,使用默认字典和 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

推荐阅读