按频率对数组元素排序

时间:2020-06-29 10:06:52

标签: python arrays hashmap

我想在python中使用dict解决这个问题,但是我无法根据逻辑创建代码。 问题说,给定一个整数数组A [],请根据元素的频率对该数组进行排序。也就是说,频率较高的元素排在第一位。如果两个元素的频率相同,则数量较少。 输入: 2

5

5 5 4 6 4

5

9 9 9 2 5

输出:

4 4 5 5 6

9 9 9 2 5

t=int(input())
for i in range(t):
    n=int(input())
    arr=list(map(int,input().split()))
    d={}
    for i in arr:
        d[i]=d.get(0,i)+1
        a=max(d[i])
        print(i*d[i])
        a=a+1
Little bit of code that I tried is as above

1 个答案:

答案 0 :(得分:1)

import collections

sample = [1, 9, 1, 1, 10, 10, 7, 1, 2, 2, 2, 0, 2, 3, 3, 4, 0, 5]
counter = collections.Counter(sample)

def helper_function(item):
    return counter[item], item  # returns a tuple

sorted_list = sorted(sample, key=helper_function)

# or if you prefer using lambda
sorted_list = sorted(sample, key=lambda item: (counter[item], item))


print(sorted_list)

输出:

[4, 5, 7, 9, 0, 0, 3, 3, 10, 10, 1, 1, 1, 1, 2, 2, 2, 2]