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

如何用Python字典实现数组元素按频率排序?求代码实现

按元素频率排序的Python实现方案

嘿,我来帮你搞定这个问题!先看看你现有代码里的几个明显问题:

  • 统计频率时,d.get(0,i)+1的参数搞反啦,get方法第一个参数是要查找的键(也就是数组里的元素i),第二个是默认值(没找到时用0),应该写成d.get(i, 0) + 1
  • 后面的a=max(d[i])完全不对路,d[i]是单个元素的频率数值,没法取最大值,而且你还没实现核心的排序逻辑
  • 最后也没有按照「频率高优先,同频率数值小优先」的规则来输出结果

下面是修正后的完整代码,用字典统计频率,再通过自定义排序规则完美实现需求:

t = int(input())
for _ in range(t):
    n = int(input())
    arr = list(map(int, input().split()))
    # 第一步:统计每个元素的出现频率
    freq_dict = {}
    for num in arr:
        freq_dict[num] = freq_dict.get(num, 0) + 1
    
    # 第二步:按照规则排序元素
    # 排序key:先按频率降序(加负号把升序转降序),再按元素数值升序
    sorted_elements = sorted(freq_dict.keys(), key=lambda x: (-freq_dict[x], x))
    
    # 第三步:生成最终输出序列,每个元素重复对应频率次数
    output = []
    for elem in sorted_elements:
        output.extend([str(elem)] * freq_dict[elem])
    
    # 打印结果
    print(' '.join(output))

代码细节解释:

  • 频率统计:用字典freq_dict遍历数组,每遇到一个元素就把对应键的数值加1,get(num, 0)保证第一次遇到元素时不会报错,默认计数从0开始。
  • 自定义排序:sorted函数的key参数是关键,lambda x: (-freq_dict[x], x)表示:
    • 优先按-freq_dict[x]排序,负号让原本的升序变成降序,这样频率高的元素排前面
    • 当两个元素频率相同时,就按x(元素本身的数值)升序排列,满足数值小的在前的要求
  • 生成输出:把排序后的元素按各自频率重复,转成字符串后用空格拼接,这样输出格式就和要求一致了。

拿你给的输入示例测试一下:

输入:
1
13
2 5 5 5 4 6 4 5 9 9 9 2 5

运行后会输出:5 5 5 5 5 9 9 9 2 2 4 4 6,完全符合「频率高优先,同频率数值小优先」的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:17:45