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



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

key_count([1, 3, 2, 1, 5, 3, 5, 1, 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创建字典来解决这个问题。正如你所看到的,我能够提取最终词典的关键字,但我不知道如何将原始列表中每个数字的出现次数添加到新列表中。我想创建一个空列表计数,它最终将是一个数字列表,表示原始列表中每个数字出现的次数。有什么建议吗?如果我没有给出完整的答案,我将不胜感激,因为我正在努力解决这个问题!提前感谢

当您可以直接构建dict时,分离键和值是一项艰巨的工作。这是算法。我将把实现留给您,尽管它在某种程度上实现了自己。

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

请参阅此处的实现:

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

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

a = [1, 3, 2, 1, 5, 3, 5, 1, 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, 3, 2, 1, 5, 3, 5, 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, 3, 2, 1, 5, 3, 5, 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())]

最新更新