[英]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.