You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

按频率排序数组元素报错:请求协助修正代码

修正按元素频率排序数组的代码

嘿,我经常遇到开发者在按元素频率排序数组时踩类似的坑!先假设你可能写了这样的错误代码:

arr = [4, 6, 2, 6, 4, 4, 6]
frequency = {}
for num in arr:
    frequency[num] = frequency[num] + 1  # 第一次遇到元素时会触发KeyError

# 尝试按频率排序
sorted_arr = sorted(arr, key=lambda x: frequency[x])
print(sorted_arr)

错误原因

这段代码会抛出KeyError,因为第一次遍历数组里的新元素时,字典frequency中还没有对应的键,直接执行frequency[num] + 1就会找不到键而报错。

修正方案

我给你两种可靠的修正方式,你可以根据需求选择:

方法一:用字典的get()方法安全统计频率

arr = [4, 6, 2, 6, 4, 4, 6]
frequency = {}
for num in arr:
    # 若键不存在,默认返回0,避免KeyError
    frequency[num] = frequency.get(num, 0) + 1

# 按频率降序排列,频率相同时按元素本身升序排序
sorted_arr = sorted(arr, key=lambda x: (-frequency[x], x))
print(sorted_arr)  # 输出: [4, 4, 4, 6, 6, 6, 2]

方法二:用collections.Counter(更简洁高效)

Python的标准库collections里的Counter专门用来统计元素频率,代码会更简洁:

from collections import Counter

arr = [4, 6, 2, 6, 4, 4, 6]
frequency = Counter(arr)

# 同样实现频率降序、元素升序的排序逻辑
sorted_arr = sorted(arr, key=lambda x: (-frequency[x], x))
print(sorted_arr)

关键细节说明

  • frequency.get(num, 0):当字典中没有num这个键时,会返回默认值0,完美解决第一次统计时的键不存在问题
  • 排序的key参数(-frequency[x], x):负号让频率高的元素排在前面;第二个元素x保证当两个元素频率相同时,按元素本身的大小升序排列(如果想要元素降序,改成-x即可)

内容的提问来源于stack exchange,提问作者Kamal Arora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:58:27