我有以下字典:
fruits = {
"apple": 5,
"Apple": 5,
"orange": 5,
"strawberry": 3,
"blueberry": 1
}
我需要打印出具有最高值的两个键的列表。关系需要按字母顺序打破A-Z,大写字母优先于小写字母。通过计数运行以下排序,但不打破关系:
popular_fruits = sorted(fruits, key=fruits.get, reverse=True)
print(popular_fruits[0:2])
我该如何做到这一点?
答案 0 :(得分:8)
您可以使用以下内容:
popular_fruits = sorted(fruits, key=lambda x: (-fruits[x], x))
print(popular_fruits[0:2])
编辑:
fruits[x]
之前的否定用于反转递减的数字排序
并且在平局的情况下,顺序由元组的第二个参数(按字母顺序)确定。
不能简单地使用sorted(fruits, key=lambda x: (fruits[x], x), reverse=True)
,因为它会反转两个元组元素的排序,但我们只需要为第一个元素执行此操作。
答案 1 :(得分:3)
您可以使用元组进行二级排序。我使用-1 *值来反转它。 "首都资本"是Python的默认排序顺序。
这是错误的,即使它有一些赞成:
popular_fruits = sorted(fruits, key = lambda x: (-1 * x[1], x[0]))
# ['Apple', 'apple']
应该像taras一样张贴:
popular_fruits = sorted(fruits, key = lambda x: (-fruits[x], x))
我按第一个和第二个字母排序,碰巧正确地给出了前两个项目,但实际上是完全错误的。如果人们认为通过将dict
混淆为列表/元组列表而发现错误是有用的,我会继续这样做。