如何在sort()函数中指定复杂key参数?含嵌套列表排序示例
key Parameter for sort() (Even with Complex Logic) Handling Complex Logic for key
No matter how tangled your sorting logic gets, the key parameter in sort() only requires you to define a mapping rule: take a single element from your list, return a value (could be a number, string, tuple, etc.) that will be used as the basis for sorting.
- For simple logic, a
lambdaexpression works perfectly—it’s concise and easy to write inline. - For complex logic (like multi-step calculations, conditional checks, or nested data processing), writing a standalone function is way more readable. This function just needs to accept one list element as input and spit out the corresponding sort key.
Here’s an example of a more complex use case: sorting strings first by whether their length is odd (comes first) or even, then by their actual length:
def custom_sort_key(element): str_length = len(element) # Return a tuple: first value controls odd/even order, second controls length return (0 if str_length % 2 == 1 else 1, str_length) my_list = ["apple", "banana", "cherry", "date"] my_list.sort(key=custom_sort_key) # Result: ['apple', 'cherry', 'date', 'banana']
Sorting Your Nested List by Float Value
For your specific list Nlist = [['naveen',31.5],['murali',44.1],['sai',23.1],['satya',23.1]], sorting by the float value is straightforward:
Each sublist follows the [name, float_val] structure, so we just need to map each sublist to its second element (index 1) as the sort key. A lambda expression makes this trivial:
Nlist = [['naveen',31.5],['murali',44.1],['sai',23.1],['satya',23.1]] # Ascending sort (default behavior) Nlist.sort(key=lambda x: x[1]) print(Nlist) # Output: [['sai', 23.1], ['satya', 23.1], ['naveen', 31.5], ['murali', 44.1]] # For descending sort, add reverse=True Nlist.sort(key=lambda x: x[1], reverse=True) print(Nlist) # Output: [['murali', 44.1], ['naveen', 31.5], ['sai', 23.1], ['satya', 23.1]]
One nice detail: Python’s sort() is stable. That means when two elements have the same sort key (like sai and satya both with 23.1), their original relative order in the list is preserved—you’ll see sai stay before satya just like in your original list.
内容的提问来源于stack exchange,提问作者Naveen Kondeti

