[Python] 특정 룰에 맞추어 리스트 정렬하기

Edit

[Python] 특정 룰에 맞추어 리스트 정렬하기

python에는 리스트를 정렬하기 위해서는 sorted가 있다. 하지만 sorted는 기본적으로 리스트의 아이템 이름 순으로 정렬하는데 우리가 원하는 특정 규칙대로 정렬 하는 방법은 없을까?

list = ['DB', 'DS', 'AI', 'OB', 'MF']
new_list = sorted(list)
print(new_list)

# ['AI', 'DB', 'DS', 'MF', 'OB']

다음과 같이 listsorted 시킬 때 아이템의 이름순으로 정렬 됨을 알 수 있다. 하지만 만약 DB > DS > AI > OB > MF 순으로 정렬을 하고 싶을 때 lambda를 이용하면 쉽게 구현할 수 있다.

rule = ['DB', 'DS', 'AI', 'OB', 'MF']
order = {key: i for i, key in enumerate(rule)}

list = ['DB', 'DS', 'AI', 'OB', 'MF']
new_list = sorted(list, key=lambda k: order[k])
print(new_list)

# ['DB', 'DS', 'AI', 'OB', 'MF']
%23%5BPython%5D%20%uD2B9%uC815%20%uB8F0%uC5D0%20%uB9DE%uCD94%uC5B4%20%uB9AC%uC2A4%uD2B8%20%uC815%uB82C%uD558%uAE30%0A@%28Python%29%5Blist%2Csort%2Cpython%5D%0A%0A%3E%20python%uC5D0%uB294%20%uB9AC%uC2A4%uD2B8%uB97C%20%uC815%uB82C%uD558%uAE30%20%uC704%uD574%uC11C%uB294%20%60sorted%60%uAC00%20%uC788%uB2E4.%20%uD558%uC9C0%uB9CC%20%60sorted%60%uB294%20%uAE30%uBCF8%uC801%uC73C%uB85C%20%uB9AC%uC2A4%uD2B8%uC758%20%uC544%uC774%uD15C%20%uC774%uB984%20%uC21C%uC73C%uB85C%20%uC815%uB82C%uD558%uB294%uB370%20%uC6B0%uB9AC%uAC00%20%uC6D0%uD558%uB294%20%uD2B9%uC815%20%uADDC%uCE59%uB300%uB85C%20%uC815%uB82C%20%uD558%uB294%20%uBC29%uBC95%uC740%20%uC5C6%uC744%uAE4C%3F%0A%0A%60%60%60python%0Alist%20%3D%20%5B%27DB%27%2C%20%27DS%27%2C%20%27AI%27%2C%20%27OB%27%2C%20%27MF%27%5D%0Anew_list%20%3D%20sorted%28list%29%0Aprint%28new_list%29%0A%0A%23%20%5B%27AI%27%2C%20%27DB%27%2C%20%27DS%27%2C%20%27MF%27%2C%20%27OB%27%5D%0A%60%60%60%0A%uB2E4%uC74C%uACFC%20%uAC19%uC774%20%60list%60%uB97C%20%60sorted%60%20%uC2DC%uD0AC%20%uB54C%20%uC544%uC774%uD15C%uC758%20%uC774%uB984%uC21C%uC73C%uB85C%20%uC815%uB82C%20%uB428%uC744%20%uC54C%20%uC218%20%uC788%uB2E4.%20%uD558%uC9C0%uB9CC%20%uB9CC%uC57D%20***DB%20%3E%20DS%20%3E%20AI%20%3E%20OB%20%3E%20MF***%20%uC21C%uC73C%uB85C%20%uC815%uB82C%uC744%20%uD558%uACE0%20%uC2F6%uC744%20%uB54C%20%60lambda%60%uB97C%20%uC774%uC6A9%uD558%uBA74%20%uC27D%uAC8C%20%uAD6C%uD604%uD560%20%uC218%20%uC788%uB2E4.%0A%0A%60%60%60python%0Arule%20%3D%20%5B%27DB%27%2C%20%27DS%27%2C%20%27AI%27%2C%20%27OB%27%2C%20%27MF%27%5D%0Aorder%20%3D%20%7Bkey%3A%20i%20for%20i%2C%20key%20in%20enumerate%28rule%29%7D%0A%0Alist%20%3D%20%5B%27DB%27%2C%20%27DS%27%2C%20%27AI%27%2C%20%27OB%27%2C%20%27MF%27%5D%0Anew_list%20%3D%20sorted%28list%2C%20key%3Dlambda%20k%3A%20order%5Bk%5D%29%0Aprint%28new_list%29%0A%0A%23%20%5B%27DB%27%2C%20%27DS%27%2C%20%27AI%27%2C%20%27OB%27%2C%20%27MF%27%5D%0A%60%60%60%0A