Способ сортировки IP-адресов

Предположим, что мы имеем список IP-адресов в следующем виде:

list_original = [
    ('192.168.204.111', 10),
    ('192.168.99.11', 20),
    ('192.168.102.105', 5),
    ('192.168.100.10', 5),
    ...
]

Как его быстро отсортировать?

Воспользуемся тем обстоятельством, что Python имеет встроенную поддержку сортировки кортежей. На этапе обхода элементов списка преобразуем IP-адреса в кортежи, состоящие из четырех целых чисел, и воспользуемся функцией sorted().

def split_ip(ip):
    """Функция преобразует IP-адрес, представленный строкой,
    в кортеж из четырех целых чисел."""
    return tuple(int(part) for part in ip.split('.'))

def key_func(item):
    return split_ip(item[0])

list_sorted = sorted(list_original, key=key_func)

Описанный трюк можно использовать для сортировки других данных, а не только IP-адресов.