# Sort array of objects using Comparator in python

Problem:- Given an array of  Student objects, sort array using a comparator that sorts them in order of decreasing marks; if  or more students have the same marks, sort those students alphabetically by name.
Input :- Array of Student objects(Student object { Name; Marks;})
amy 90
ckm 90
nikhil 50
shweta 75
ranjan 150

Output
:- Sort based on Marks (Name alphabetically if  marks is same)
ranjan  150
amy    90
ckm   90
shweta  75
nikhil    50

### Sample program to sort list of student objects by passing comparator

class Students:
def __init__(self, name, marks):
self.name = name
self.marks = marks
def comparator(a, b):
if a.marks != b.marks :
if a.marks < b.marks :
return 1
elif a.marks > b.marks:
return -1
else :
return 0
else:
if a.name > b.name :
return 1
elif a.name < b.name:
return -1
else :
return 0

print "Enter number of students "
n = int(raw_input())

data = []
for i in range(n):
print "Enter Name and marks of student %d" %(i+1)
name, marks = raw_input().split()
marks = int(marks)
player = Students(name, marks)
data.append(player)

data = sorted(data, cmp=Students.comparator)
print "\nStudents Name and marks in sorted form "
print "Name \t Marks"
print "----------------"
for i in data:
print i.name+ " \t "+ str(i.marks)

Sample output:-
>>>
Enter number of students
5
Enter Name and marks of student 1
amy 90
Enter Name and marks of student 2
ckm 90
Enter Name and marks of student 3
nikhil 50
Enter Name and marks of student 4
shweta 75
Enter Name and marks of student 5
ranjan 150

Students Name and marks in sorted form
Name Marks
----------------
ranjan 150
amy 90
ckm 90
shweta 75
nikhil 50