# Sorting in Python

In Python, Sorting is systematically arranging the data as per the given criteria. These have a lot of applications and you will be studying this in-depth.

Examples :
*) Arranging student roll numbers in ascending order
*) Displaying the products which have high sales etc

### Sorting lists

Let us start with a simple example of list sorting by numbers. We’ll be using built-in method under list `sort()` method to get result.

Syntax

```    newlist.sort(optional parameters)
```

Below optional parameters

Option NameValuesDefault Value
reverseTrue or FalseFalse
key     len() method to sort on bases on length of string,custom user defined function can also be used

Sorting numbers in Ascending order

```a=[
9,6,8,2,1,7,3
]
a.sort()
print(a)

#PYTHON OUTPUT
[1, 2, 3, 6, 7, 8, 9]
```

Sorting numbers in Descending order

```a=[
9,6,8,2,1,7,3
]
a.sort(reverse=True)
print(a)

#PYTHON OUTPUT
[9, 8, 7, 6, 3, 2, 1]
```

Sorting years with `sort()` using user defined function

```def myfunc(e):
return e

a=[
2018,2015,2017,2000,2013,2011
]
a.sort(key=myfunc)

print(a)

#PYTHON OUTPUT
[2000, 2011, 2013, 2015, 2017, 2018]
```

Sorting names by alphabets

```names = [
'John','Nancy','Amber','Peter','Bane'
]
names.sort()
print(names)#prints names in alphabetical ascending order

names.sort(reverse=True)
print(names)#prints names in alphabetical descending order

#PYTHON OUTPUT
['Amber', 'Bane', 'John', 'Nancy', 'Peter']
['Peter', 'Nancy', 'John', 'Bane', 'Amber']

```

Note : `sort()` method only sorts on list and returns `None`. To sort on non-list array use `sorted()` method.

## Sorting Tuples

Sorting using `sorted()` method

```d = (
5,2,6,1,9
)

print(sorted(d))
print(sorted(d,reverse=True))

#PYTHON OUTPUT
[1, 2, 5, 6, 9]
[9, 6, 5, 2, 1]
```

## Sorting Dictionaries

Sorting Keys of the dictionary

Below we have created a dictionary which has names in key and value.
To only order keys of dictionary use `d.keys()` method this will return keys of that dictionary.
Calling `reverse=True` attribute inside `sorted()` method will return sorted list in reverse order.

```d={
0:'Amber',
1:'John',
2:'Kiran',
3:'Rakesh',
4:'Yogesh',
}

print(sorted(d.keys())) #This will order keys of dictionary in Ascending Order

print(sorted(d.keys(),reverse=True)) # Calling reverse attribute with value True will print the keys of dictionary in Descending Order

#PYTHON OUTPUT
[0, 1, 2, 3, 4]
[4, 3, 2, 1, 0]
```

Sorting Values in the dictionary

Here we’ll be using the same method as above except insisted on calling `d.keys()`. We’ll call `d.values()` method which returns values of dictionary.

```d={
0:'Amber',
1:'John',
2:'Kiran',
3:'Rakesh',
4:'Yogesh',
}

print(sorted(d.values())) #This will order values of dictonary in Ascending Order

print(sorted(d.values(),reverse=True)) # Calling reverse attribute with value True will print the values of dictonary in Descending Order
```

## Advance Dictionary Sorting

In reality, there will be many cases where dictionary is multi-dimensional and need the be order.
So in this tutorial, we’ll be covering most of the complex multi-dimensional dict and sort them in order.

Sorting dictionary by user age.

```d = {
0 : {
'username' : 'Jane154',
'fname' : 'Jane',
'age' : 22,
},
1 : {
'username' : 'Humayun12',
'fname' : 'Humayun',
'age' : 16,
},
2 : {
'username' : 'Rakesh45',
'fname' : 'Rakesh',
'age' : 29,
},
3 : {
'username' : 'Kimmy123',
'fname' : 'Kimmy',
'age' : 12,
},
}

def sortByAge(e):
return e[1]['age']

print(sorted(d.items(),key=sortByAge))

print("\n\nSorting age in reverse order with tuple inside list \n\n")

print(sorted(d.items(),key=sortByAge,reverse=True))

print("\n\nSorting age in reverse order and this will return a dictionary \n")

print(dict(sorted(d.items(),key=sortByAge,reverse=True)))

#PYTHON OUTPUT
[(3, {'username': 'Kimmy123', 'fname': 'Kimmy', 'age': 12}), (1, {'username': 'Humayun12', 'fname': 'Humayun', 'age': 16}), (0, {'username': 'Jane154', 'fname': 'Jane', 'age': 22}), (2, {'username': 'Rakesh45', 'fname': 'Rakesh', 'age':29})]

Sorting age in reverse order

[(2, {'username': 'Rakesh45', 'fname': 'Rakesh', 'age': 29}), (0, {'username':'Jane154', 'fname': 'Jane', 'age': 22}), (1, {'username': 'Humayun12', 'fname': 'Humayun', 'age': 16}), (3, {'username': 'Kimmy123', 'fname': 'Kimmy', 'age':12})]

{2: {'username': 'Rakesh45', 'fname': 'Rakesh', 'age': 29}, 0: {'username': 'Jane154', 'fname': 'Jane', 'age': 22}, 1: {'username': 'Humayun12', 'fname': 'Humayun', 'age': 16}, 3: {'username': 'Kimmy123', 'fname': 'Kimmy', 'age': 12}}
```

Note: Dictionaries are unordered and unsorted collection on data.
so like lists they don’t have sort() method. But bypassing dictionary in `sorted()` method will return Tuple inside list in sorted order.