Python按词降序排序字典,然后按字母顺序排列

时间:2018-06-16 06:03:43

标签: python sorting

我有以下字典:

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])

我该如何做到这一点?

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混淆为列表/元组列表而发现错误是有用的,我会继续这样做。