使用字典功能在python中计数

时间:2018-09-19 01:41:22

标签: python python-3.x dictionary

所以我尝试计算一个随机数组,例如[1,2,4,6,1,6,8,3,7,8]然后输出一个数组。我知道输出不正确,但收到以下错误消息: 异常:KeyError ::第9行::在重复项中counts [nums] + = 1 这是什么意思?

,不,我不想使用收集模块。

我知道输出还不正确,但是我想修复字典,所以我不会犯同样的错误。谢谢!

def duplicate_items(list_numbers):
    counts = {}
    new_arr = []
    for nums in list_numbers:
        if nums in counts:
            count[nums] = 1

        else:
            counts[nums] += 1
    for k in counts:
        if count[k] > 1:
            new_arr.append(k)

return sorted(new_arr)

4 个答案:

答案 0 :(得分:0)

您的 dat <- data.frame(a = rep(c(1,Inf), 1e6), b = rep(c(Inf,2), 1e6), c = rep(c('a','b'),1e6),d = rep(c(1,Inf), 1e6), e = rep(c(Inf,2), 1e6)) system.time(dat[dat==Inf] <- NA) # user system elapsed # 0.316 0.024 0.340 if在第一个循环中被翻转,因此else找不到密钥,应该是:

counts[nums] += 1

答案 1 :(得分:0)

@E。 Sun给出了正确的解释,但您也可以做得更优雅。如果密钥不在字典中,请使用dict.get提供默认值。

for nums in list_numbers:
    # If the key, nums is not in counts, take 0 as fallback value.
    counts[nums] = counts.get(nums, 0) + 1

答案 2 :(得分:0)

缺少键时,使用字典的get方法返回默认值。

def duplicate_items(list_numbers):
    counts = {}
    for nums in list_numbers:
        counts[nums] = counts.get(nums, 0) + 1
    new_arr = [k for (k, v) in counts.items() if v > 1]

return sorted(new_arr)

答案 3 :(得分:0)

这样的事情怎么样?您无需使用collections python具有内置的.count函数,您可以使用该索引的countsindex创建count字典

然后您可以使用 list comprehension 列出您的列表,并且只添加值大于1的字典项

def dups(l_nums):
    counts = {i: l_nums.count(i) for i in l_nums}
    new_arr = [k for k in counts if counts[k] > 1]
    return(sorted(new_arr))
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 time.py
[1, 6, 8]