Generate 되는 리소스들을 보면 보통 숫자를 두자리 혹은 세자리로 쓰게 된다.
A: 000, 001, 002, ..., 010, 011, 012, ..., 020, 021, 022, ...
B: 0, 1, 2, ..., 10, 11, 12, ..., 20, 21, 22, ...
그럼, 위와 같이 A타입이나 B타입으로 번호가 매겨지는데,
A 타입으로 하면 Sorting 시 알아서 잘 되서 편하지만 B 타입으로 하면
0, 1, 10, 11, 12, ... 19, 2, 20, 21, ...
이렇게 꼬여 버린다.
여기, 이렇게 꼬이지 않게 해주는 아름다운 sort 모듈인 natsort 가 있다.
>>> str_list
['1', '2', '3', '4', '10', '11', '20', '21', '22', '33', '55', '6', '61']
>>> str_list.sort()
>>> str_list
['1', '10', '11', '2', '20', '21', '22', '3', '33', '4', '55', '6', '61']
>>> from natsort import natsorted
>>> str_list
['1', '2', '3', '4', '10', '11', '20', '21', '22', '33', '55', '6', '61']
>>> natsorted(str_list)
['1', '2', '3', '4', '6', '10', '11', '20', '21', '22', '33', '55', '61']
Dict 내 value 를 기준으로 Sorting 을 하려 할 때 같이 사용되는 도구 이다.
>>> data
[{'a': 0, 'b': 20}, {'a': 1, 'b': 19}, {'a': 2, 'b': 18}, {'a': 3, 'b': 17}, {'a': 4, 'b': 16}, {'a': 5, 'b': 15}, {'a': 6, 'b': 14}, {'a': 7, 'b': 13}, {'a': 8, 'b': 12}, {'a': 9, 'b': 11}]
>>> from operator import itemgetter
>>> sorted(data, key=itemgetter('b'))
[{'a': 9, 'b': 11}, {'a': 8, 'b': 12}, {'a': 7, 'b': 13}, {'a': 6, 'b': 14}, {'a': 5, 'b': 15}, {'a': 4, 'b': 16}, {'a': 3, 'b': 17}, {'a': 2, 'b': 18}, {'a': 1, 'b': 19}, {'a': 0, 'b': 20}]
IP 는 본래 binary 값이기 때문에 decimal 로도 표현될 수 있다. 하지만 그렇게 하면 당연히 힘들다. IP 의 List 에 대해 Sorting 을 쉽게 하려면 아래와 같이 하면 된다.
import ipaddress
ip_list = ["IP_ADDRESS", ...]
ip_list = sorted(ip_list, key=ipaddress.IPv4Network) # sorted 함수는 return 으로 받아야함. Void X