在不使用计数器的情况下对列表中的元素进行计数

问题描述

应该以以下格式返回字典:

key_count([1,3,2,1,5,4]) ⇒ {
    1: 3,2: 1,3: 2,4: 1,5: 2,}

我知道最快的方法是:

import collections

def key_count(l):
    return collections.Counter(l)

但是,我希望不导入collections.Counter

到目前为止,我有

x = []
def key_count(l):
    for i in l:
        if i not in x:
            x.append(i)
            
    count = []
    for i in l:
        if i == i:
            

我通过尝试将字典的两侧(键和值)提取到单独的列表中,然后使用zip创建字典来解决了这个问题。如您所见,我能够提取最终字典的键,但是我不知道如何在新列表中为原始列表中的每个数字添加出现次数。我想创建一个空列表计数,该计数最终将是一个数字列表,表示原始列表中每个数字出现了多少次。有小费吗?在我尝试解决此问题时,如果不给出完整答案,我们将不胜感激!预先感谢

解决方法

当您可以直接构建字典时,将键和值分开很费力。这是算法。我会把实现留给您,尽管它本身是实现的。

  1. 做出一个空的字典
  2. 遍历列表
  3. 如果该元素不在dict中,则将该值设置为1。否则,将其添加到现有值。

在此处查看实现:

https://stackoverflow.com/a/8041395/4518341

,

经典减少问题。使用循环:

a = [1,3,2,1,5,4]
m = {}

for n in a:
   if n in m: m[n] += 1
   else: m[n] = 1

print(m)

或显式减少:

from functools import reduce
a = [1,4]

def f(m,n):
   if n in m: m[n] += 1
   else: m[n] = 1
   return m

m2 = reduce(f,a,{})
print(m2)
,

使用字典将键和值配对,然后使用x []跟踪已建立的不同项目。

import collections

def keycount(l):
    return collections.Counter(l)

key_count=[1,4]
x = []
dictionary ={}

def Collection_count(l):
    for i in l:
        if i not in x:
            x.append(i)
            dictionary[i]=1
        else:
            dictionary[i]=dictionary[i]+1

Collection_count(key_count)
[print(key,value) for (key,value) in sorted(dictionary.items())]