Python 按降序值排序字典,然后按字母顺序按键排序



我有以下字典:

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

我怎样才能做到这一点?

你可以使用这样的东西:

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 * 的值来反转它。"大写字母优先"是 Python 的默认排序顺序。

这是错误的,即使它得到了一些赞成票:

popular_fruits = sorted(fruits, key = lambda x: (-1 * x[1], x[0]))
# ['Apple', 'apple']

它应该像塔拉斯发布的那样:

popular_fruits = sorted(fruits, key = lambda x: (-fruits[x], x))

我按第一个和第二个字母排序,碰巧正确地给出了前两个项目,但实际上是完全错误的。如果人们认为通过混淆列表/元组列表的dict来查看可能造成的错误很有用,我会继续这样做。

最新更新