在Python中按值和键排序字典?
我有以下字典:在Python中按值和键排序字典?,python,dictionary,Python,Dictionary,我有以下字典: dic = {'s': 3, 'a': 2, 'w': 2, 'y': 2, 'x': 2, 'm': 4, 'd': 5} 我需要先按值对元素排序,如果值重复,然后按键排序,这样我将得到以下输出: dic = [('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)] 我已尝试使用此代码: sorted(dic.items(), key=lambda x: x[1], reverse=True
dic = {'s': 3, 'a': 2, 'w': 2, 'y': 2, 'x': 2, 'm': 4, 'd': 5}
我需要先按值对元素排序,如果值重复,然后按键排序,这样我将得到以下输出:
dic = [('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)]
我已尝试使用此代码:
sorted(dic.items(), key=lambda x: x[1], reverse=True)
但我一直得到相同的输出(键等于2的字母不是按字母顺序排列的):
有人知道我如何解决这个问题吗
提前感谢。您就快到了,您需要在lambda排序中同时包含键和值:
sorted(dic.items(), key=lambda x: (-x[1],x[0]))
使用此键的定义
key=lambda x: (x[1],x[0])
您可以使用key函数对dict项进行排序,该函数返回一个2元组,其中dict项的反数值作为第一项,key作为第二项:
sorted(dic.items(), key=lambda t: (-t[1], t[0]))
这将返回:
[('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)]
这个答案的字母顺序相反,因为
reverse=True
key=lambda x:(-x[1],x[0]),reverse=False将解决此问题,但如果未为对象定义-
运算符,则可能会导致其他问题。谢谢,Nicolas。它工作得很好。你能解释一下在这种情况下lambda函数背后的逻辑吗?我听不懂。这个答案的字母顺序是相反的。
[('d', 5), ('m', 4), ('s', 3), ('a', 2), ('w', 2), ('x', 2), ('y', 2)]