A list of Point class objects is given.
The Point class is as follows:
class Point:
def __init__(self, value, segment, is_start=False):
self.value = value
self.is_start = is_start
The goal is to sort the list by the value attribute provided that if two objects have the same value attributes, the object whose is_start value is True should go before the object whose is_start value is False.
An example of input:
[Point(3, False), Point(3, True), Point(1, True),]
I’ve tried using array.sort(key=lambda x: x.value) and the output was:
[Point(1, True), Point(3, False), Point(3, True),]
But it doesn’t satisfy the condition stated before (Point(3, True) should be before Point(3, False)).
An example of desired output:
[Point(1, True), Point(3, True), Point(3, False),]
What function to use to satisfy the stated condition?
Advertisement
Answer
Try this.
sorted(x, key=lambda x: (x.value, not x.is_start))