繁体   English   中英

如何根据值对字典进行排序,如果多个键具有相同的值,则按键排序

[英]How to sort dictionary based on values and if multiple keys have same values then sort by keys

a = [1,1,1,11,2,2,2,2,2,3,3,3,3,4,4,4,4,8,11,8,8,5,11,7,7,7,7,7,]

freq = dict()

for i in a :
    freq[i] = freq.get(i, 0) +1


fsort = dict(sorted(freq.items(), key=lambda item:item[1], reverse=True))
print(fsort)

上面的代码计算数字的频率并返回一个频率字典,在这个阶段字典是根据值排序的。 现在如何按降序对具有相同值的键进行排序? 这是代码的 output 和预期的 output :

Output:
{2: 5, 7: 5, 3: 4, 4: 4, 1: 3, 11: 3, 8: 3, 5: 1}


Expected Output:
{7: 5, 2: 5, 4: 4, 3: 4, 11: 3, 1: 3, 8: 3, 5: 1}

您可以使用元组作为键。 特别是(value, key)形式的元组:

dict(sorted(freq.items(), key=lambda item: item[::-1], reverse=True))

对于您的 dict,您可以简单地使用key=lambda x: (x[1], x[0])进行排序

对于您的代码,您还可以使用来自collection模块的计数器,如下所示:

freq = Counter(a)

您可以反转每个键值对并取每个键值对的负值(无需设置reverse=True ):

dict(sorted(freq.items(),key=lambda item:(-item[1],-item[0])))

如果您需要对键进行升序排序,对值进行降序排序(反之亦然),这种方法可以让您更加灵活。 您只需要更改 lambda function 中的标志即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM