使用字典来计算列表中的项目数

2024-12-16 08:35:00
admin
原创
149
摘要:问题描述:假设我有一个项目列表,例如:['apple', 'red', 'apple', 'red', 'red', 'pear'] 我想要一本字典来计算每个项目在列表中出现的次数。因此,对于上面的列表,结果应该是:{'apple': 2, 'red': 3, 'pear': 1} 我怎样才能用 Python...

问题描述:

假设我有一个项目列表,例如:

['apple', 'red', 'apple', 'red', 'red', 'pear']

我想要一本字典来计算每个项目在列表中出现的次数。因此,对于上面的列表,结果应该是:

{'apple': 2, 'red': 3, 'pear': 1}

我怎样才能用 Python 简单地做到这一点?


如果您只对计数列表中单个元素的实例感兴趣,请参阅如何计算列表项的出现次数?。


解决方案 1:

在 2.7 和 3.1 中,有用于此目的的特殊Counter(子类)。dict

>>> from collections import Counter
>>> Counter(['apple','red','apple','red','red','pear'])
Counter({'red': 3, 'apple': 2, 'pear': 1})

解决方案 2:

我喜欢:

counts = dict()
for i in items:
  counts[i] = counts.get(i, 0) + 1

如果键不存在,.get 允许您指定默认值。

解决方案 3:

只需使用列表属性 count\

i = ['apple','red','apple','red','red','pear']
d = {x:i.count(x) for x in i}
print d

输出 :

{'pear': 1, 'apple': 2, 'red': 3}

解决方案 4:

>>> L = ['apple','red','apple','red','red','pear']
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i in L:
...   d[i] += 1
>>> d
defaultdict(<type 'int'>, {'pear': 1, 'apple': 2, 'red': 3})

解决方案 5:

我一直认为,对于如此简单的任务,我不会想导入任何东西。但我可能错了,这取决于 collections.Counter 是否更快。

items = "Whats the simpliest way to add the list items to a dictionary "

stats = {}
for i in items:
    if i in stats:
        stats[i] += 1
    else:
        stats[i] = 1

# bonus
for i in sorted(stats, key=stats.get):
    print("%d×'%s'" % (stats[i], i))

我认为这可能比使用 count() 更好,因为它只会遍历可迭代对象一次,而 count 可能会在每次迭代中搜索整个对象。我使用此方法解析了几兆字节的统计数据,而且它总是相当快。

解决方案 6:

L = ['apple','red','apple','red','red','pear']
d = {}
[d.__setitem__(item,1+d.get(item,0)) for item in L]
print d 

给予{'pear': 1, 'apple': 2, 'red': 3}

解决方案 7:

如果你使用 Numpy,该unique函数可以通过传递以下内容告诉你每个值出现的次数return_counts=True

>>> data = ['apple', 'red', 'apple', 'red', 'red', 'pear']
>>> np.unique(data, return_counts=True)
(array(['apple', 'pear', 'red'], dtype='<U5'), array([2, 1, 3]))

计数的顺序与找到的不同元素的顺序相同;因此我们可以使用通常的技巧来创建所需的字典(将两个元素作为单独的参数传递给zip):

>>> dict(zip(*np.unique(data, return_counts=True)))
{'apple': 2, 'pear': 1, 'red': 3}

如果你特别有一个由小整数组成的大型输入 Numpy 数组,则可能会从以下方式获得更好的性能bincount

>>> data = np.random.randint(10, size=100)
>>> data
array([1, 0, 0, 3, 3, 4, 2, 4, 4, 0, 4, 8, 7, 4, 4, 8, 7, 0, 0, 2, 4, 2,
       0, 9, 0, 2, 7, 0, 7, 7, 5, 6, 6, 8, 4, 2, 7, 6, 0, 3, 6, 3, 0, 4,
       8, 8, 9, 5, 2, 2, 5, 1, 1, 1, 9, 9, 5, 0, 1, 1, 9, 5, 4, 9, 5, 2,
       7, 3, 9, 0, 1, 4, 9, 1, 1, 5, 4, 7, 5, 0, 3, 5, 1, 9, 4, 8, 8, 9,
       7, 7, 7, 5, 6, 3, 2, 4, 3, 9, 6, 0])
>>> np.bincount(data)
array([14, 10,  9,  8, 14, 10,  6, 11,  7, 11])

输出数组中的第 th 个值n表示出现的次数n,因此我们可以根据需要使用以下命令创建字典enumerate

>>> dict(enumerate(np.bincount(data)))
{0: 14, 1: 10, 2: 9, 3: 8, 4: 14, 5: 10, 6: 6, 7: 11, 8: 7, 9: 11}

解决方案 8:

这是一个简单的答案!

def equalizeArray(arr):
    # Counting the frequency of each element in the array
    freq = {}
    for i in arr:
        if i not in freq:
            freq[i] = 1
        else:
            freq[i] += 1
    # Finding the element with the highest frequency
    max_freq = max(freq.values())
    # Calculating the number of deletions required
    for key,value in freq.items():
        if value == max_freq:
            print(key,"been repeated:",value,"times")

解决方案 9:

首先创建要计数的元素列表

elements = [1, 2, 3, 2, 1, 3, 2, 1, 1, 4, 5, 4, 4]

创建一个空字典,我们对列表也做同样的事情

>>> counts = {}

创建一个 for 循环,计算“key”出现的次数,每次出现时加 1

for element in elements:
   if element in counts:
   counts[element] +=1

检查我们之前是否遇到过该键,如果是,我们就加 1,如果没有,我们就使用“else”,这样新的键就被添加到字典中。

>>> else:
>>> counts[element] = 1

现在使用 'items() 打印计数,以便我们可以创建键值对的序列

for element, count in counts.items():
   print(element, ":", count)

在这里,items() 方法向我们展示了键值对,就好像我们问:“对于元素,也就是在元素中将先前的数据加载到'count'中,并将其更新为键值对序列,这就是 item() 所做的

无注释的代码:

    elements = [1, 2, 3, 2, 1, 3, 2, 1, 1, 4, 5, 4, 4]
    counts = {}
    for element in elements:
        if element in counts:
            counts[element] += 1
        else:
            counts[element] = 1
    
    for element, count in counts.items():
        print(element, ":", count)
OUTPUT:
    1:4
    2:3
    3:2
    4:3
    5:1

解决方案 10:

mylist = [1,2,1,5,1,1,6,'a','a','b']
result = {}
for i in mylist:
    result[i] = mylist.count(i)
print(result)
相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1317  
  IPD(Integrated Product Development)项目管理作为一种先进的产品开发管理模式,在众多企业中得到了广泛应用。它旨在通过整合企业的各种资源,实现产品的快速、高质量开发,从而提升企业的市场竞争力。IPD项目管理涵盖多个方面,其中五大核心要素尤为关键,它们相互关联、相互影响,共同构成了IPD项目...
IPD流程中PDCP是什么意思   5  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它强调将产品开发视为一个完整的流程,涵盖从概念产生到产品退市的全生命周期,通过跨部门团队的协同合作,实现缩短产品上市时间、提高产品质量、降低成本等目标。IPD测试流程作为IPD体系的重...
华为IPD流程   7  
  华为 IPD 产品开发流程是一套先进且成熟的产品开发管理体系,在提升企业产品竞争力、促进团队协作等方面发挥着重要作用。它以市场为导向,强调跨部门团队的协同合作,旨在实现产品的快速、高质量交付,满足客户需求并提升企业的经济效益。通过深入了解和应用 IPD 产品开发流程,企业能够优化内部资源配置,提高团队协作效率,从而在激...
IPD管理流程   8  
  IPD(Integrated Product Development)即集成产品开发,是一套先进的、成熟的产品开发管理思想、模式和方法。它强调将产品开发视为一个完整的流程,涵盖从概念产生到产品退市的全生命周期,涉及市场、研发、生产、销售、售后等多个部门的协同合作。构建高效的项目管理文化对于企业的发展至关重要,而IPD培...
IPD开发流程管理   5  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用