考虑到下面的字典。。。

d = {'ab': 3, 'aa': 3, 'b': 4, 'c': 2, 'a': 1}

>>>sorted(d, key=d.get, reverse=True)[:2]
['b', 'ab']

使用sorted,目标是生成与两个最高值关联的键。这就是我很难让它做我想做的事情:当两个值被绑定时,应该选择第一个按字母顺序出现的键。所以在这个例子中,我实际上想要返回的是['b','aa'],因为'aa'和'ab'的值都是3。如果这有帮助的话,字典的值也总是正的。

最佳答案

怎么样:

>>> d = {'ab': 3, 'aa': 3, 'b': 4, 'c': 2, 'a': 1}
>>> sorted(d, key=lambda x: (-d[x], x))
['b', 'aa', 'ab', 'c', 'a']
>>> sorted(d, key=lambda x: (-d[x], x))[:2]
['b', 'aa']


>>> sorted(d, key=lambda x: (-d[x], x.lower()))[:2]
['b', 'aa']

取决于你有多在乎这个案子。
您还可以利用排序是稳定的这一事实,分两步完成:
>>> sorted(sorted(d), key=d.get, reverse=True)
['b', 'aa', 'ab', 'c', 'a']

关于python - 在这种情况下,sorted()的替代方法是什么?还是可以管理?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21128862/

10-10 06:45