所以我尝试计算一个随机数组,例如[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)
答案 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
函数,您可以使用该索引的counts
和index
创建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]