# How to use sorted() and sort() in Python

## Using sorted()

sorted() is a built-in function in Python.

- The original order of values is unchanged once it's called.
- It returns an ordered list.

```
numbers = [1, 5, 3, 2, 4]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
print(numbers)
# Output:
# [1, 2, 3, 4, 5]
# [1, 5, 3, 2, 4]
```

## Using sort()

The sort() is a method of list class. It orders in place and return nothing.

```
sorted_numbers = numbers.sort()
print(sorted_numbers)
print(numbers)
# Output:
# None
# [1, 2, 3, 4, 5]
```

## Sort in reverse order

```
numbers = [1, 5, 3, 2, 4]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)
print(numbers)
# Output:
# [5, 4, 3, 2, 1]
# [1, 5, 3, 2, 4]
numbers.sort(reverse=True)
print(numbers)
# Output:
# [5, 4, 3, 2, 1]
```

## Sort dictionary

Note that the keys in a dictionary must be unique. In the following example, even if two 5s are initialized in the number list, they will be deduplicated.

```
numbers_set = {20, 5, 3, 2, 4, 5}
sorted_numbers_set = sorted(numbers_set)
print(numbers_set)
print(sorted_numbers_set)
print(set(sorted_numbers_set))
# Output:
# {2, 3, 4, 5, 20}
# [2, 3, 4, 5, 20]
# {2, 3, 4, 5, 20}
```

## Sort tuple

Example 1:

```
numbers_tuple = (10, 5, 3, 2, 4, 5)
sorted_numbers_tuple = sorted(numbers_tuple)
print(numbers_tuple)
print(sorted_numbers_tuple)
print(tuple(sorted_numbers_tuple))
# Output:
# (10, 5, 3, 2, 4, 5)
# [2, 3, 4, 5, 5, 10]
# (2, 3, 4, 5, 5, 10)
```

Example 2:

```
fruits = [("apple", 10), ("orange", 6), ("banana", 9), ("pear", 3)]
sorted_fruits = sorted(fruits, key=lambda x: x[1], reverse=True)
print(sorted_fruits)
# Output:
# [('apple', 10), ('banana', 9), ('orange', 6), ('pear', 3)]
```

Example 3:

```
from collections import namedtuple
Student = namedtuple("Student", "name, age, grade")
students = [
Student("bill", 11, 97),
Student("Andy", 12, 95),
Student("Harry", 10, 100),
Student("Thor", 11, 96),
]
sorted_students = sorted(students, key=lambda x: getattr(x, "grade"), reverse=True)
print(sorted_students)
print(students)
# Output:
# [Student(name='Harry', age=10, grade=100), Student(name='bill', age=11, grade=97), Student(name='Thor', age=11, grade=96), Student(name='Andy', age=12, grade=95)]
# [Student(name='bill', age=11, grade=97), Student(name='Andy', age=12, grade=95), Student(name='Harry', age=10, grade=100), Student(name='Thor', age=11, grade=96)]
```