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

如何按元素出现频率对字典的列表类型value进行排序

问题解决方法

问题根因

你原来的代码仅使用元素出现次数作为排序依据,相同出现次数的元素会保留在原列表中的相对顺序,不会按元素值聚合,因此会出现同值元素分散排布的问题,就是你看到的2和d交替出现的情况。
除此之外,直接在排序key中调用v.count会导致每个元素都遍历一次列表统计次数,时间复杂度为O(n²),列表较长时性能会非常差。

修复方案

先通过collections.Counter提前统计每个列表的元素频率,排序时同时使用「出现次数」和「元素本身」作为排序key,开启倒序即可:既可以保证同频率的同值元素聚合在一起,也能将时间复杂度降到O(n log n)。

from collections import Counter

dict_1 = {'a':["1","2","d","d","d","1","2","2"], 
          'b':["1","2","e","e","5","5","5","6"]}

sorted_dict = {}
for key, lst in dict_1.items():
    freq = Counter(lst)
    # 排序规则:先按频率倒序,同频率按元素值倒序,和你给出的预期输出完全匹配
    sorted_lst = sorted(lst, key=lambda x: (freq[x], x), reverse=True)
    sorted_dict[key] = sorted_lst

print(sorted_dict)

运行后输出结果为:

{'a': ['d', 'd', 'd', '2', '2', '2', '1', '1'], 'b': ['5', '5', '5', 'e', 'e', '6', '2', '1']}

完全符合你的需求。如果你不需要同频率元素按值倒序,只需要调整key里的第二个排序规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:06:05