使用`key`参数按降序排序字符串列表而不使用`reverse = True`?

Del*_*gan 2 python sorting list python-3.x

我有一个像这样的列表:

fruits = ["blueberry", "peach", "applepine", "orange", "pear", "coconut", "lemon"]
Run Code Online (Sandbox Code Playgroud)


我需要按照以下规则对其进行排序:

  • 名称中包含5个或更少字母的水果首先出现
  • 然后,水果按反向字母顺序排序

这应该给出以下列表:

sorted_fruits = ["pear", "peach", "lemon", "orange", "coconut", "blueberry", "applepine"]
Run Code Online (Sandbox Code Playgroud)

我想在包含字符串的列表上应用反向字母排序但我不能使用可选参数,reverse=True因为这个条件在我的排序优先级中排在第二位,所以我必须使用lambda函数和key参数.

我怎么能处理这个?

我知道通常我们可以否定int但我不知道string对象的技巧,(我虽然[-ord(i) for i in fruit]但它看起来很难看).

shx*_*hx2 5

您可以"人工"反转键的第一部分,以便使用可以获得reverse=True所需的结果:

sort_key = lambda f: ( len(f)<=5, f )
sorted(fruits, key = sort_key, reverse = True)
Run Code Online (Sandbox Code Playgroud)

len(f)<=5对于长字符串,条件给出0(= False),对于短字符串,条件给出1(= True),因此长字符串在短字符串之前.然后,reverse=True纠正这一点.

- 例如:

fruits = ["blueberry", "peach", "applepine", "orange", "pear", "coconut", "lemon"]
sort_key = lambda f: ( len(f)<=5, f )
sorted(fruits, key = sort_key, reverse = True)
=> ['pear', 'peach', 'lemon', 'orange', 'coconut', 'blueberry', 'applepine']
Run Code Online (Sandbox Code Playgroud)