I'm trying to sort a list and I can't figure out to reverse the order of a second sorting characteristic.
import math
ps = {1:(1,1),2:(3,2),3:(3,-3),4:(-3,4),5:(-2,-2),6:(3,3),7:(1,-1)}
l = []
for x in range(1,8):
l.append((math.atan2(ps[x][1],ps[x][0]),ps[x]))
for c in sorted(l, key = lambda t:(t[0], math.sqrt((0-t[1][0])**2 + (0-t[1][1])**2)),reverse = True):
print(c)
The first sort characteristic is sorting by angle, the second sorts by distance from the origin if the angle is equal. Does anyone know how to do this. Thanks in advance for the help.
Put a minus sign in front of the second sort characteristic:
for c in sorted(l, key = lambda t:(t[0], -math.sqrt((0-t[1][0])**2 + (0-t[1][1])**2)),reverse = True):
print(c)
You can do two sorts, least significant first. Python sorting is stable, so the order determined by the first sort will hold when you do the second.
for c in sorted(sorted(l, key = lambda t:math.sqrt((0-t[1][0])**2 + (0-t[1][1])**2)), key = lambda t:t[0], reverse=True):
This method works even when the keys aren't numeric.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With