7강 / 20강

정렬의 실무 — 인기순인데 왜 순서가 계속 바뀌죠?

다중 기준 · 안정 정렬 · key 함수

정렬의 실무 — 인기순인데 왜 순서가 계속 바뀌죠?
실무 정렬은 기준이 하나가 아닙니다. 1순위가 같을 때 2순위를 정해 주지 않으면 순서가 흔들려요.

고객 문의가 들어왔습니다.

"인기순으로 보는데, 새로고침할 때마다 상품 순서가 바뀌어요. 버그 아닌가요?"

확인해 보니 정말 그렇습니다. 판매량이 똑같이 0인 신상품 200개가 매번 다른 순서로 나옵니다. 코드는 분명히 ORDER BY 판매량 DESC 인데요.

버그가 아닙니다. 기준이 부족한 것입니다.

튜플을 key로 주면 앞에서부터 차례로 비교합니다.
Python 브라우저에서 실행

key 함수 — 정렬의 진짜 도구

sorted(목록, key=함수) 에서 key는 "각 항목을 무엇으로 바꿔서 비교할까"를 정합니다.

  • key=lambda s: s["가격"] → 가격 오름차순
  • key=lambda s: -s["가격"] → 가격 내림차순 (숫자는 마이너스로 뒤집기)
  • key=lambda s: (-s["판매"], s["이름"]) → 판매 내림차순, 동점이면 이름 가나다순
  • reverse=True → 전체를 뒤집기 (단, 동점 순서도 뒤집힙니다 — 주의!)
상품 목록 정렬기 — 기준을 여러 개 쌓아 순서를 확정해 보세요
불러오는 중…

실무에서 자주 쓰는 정렬 기준들

화면1순위동점 처리(2순위)이유
인기순최근 7일 판매량 ↓등록일 ↓신상품이 뒤로 밀리지 않게
낮은 가격순가격 ↑배송비 ↑ · 상품ID ↑같은 가격이면 배송비 싼 것 먼저
리뷰순평점 ↓리뷰 개수 ↓리뷰 1개 5점이 1등이 되는 것 방지
주문 처리우선순위 ↓주문시각 ↑같은 등급이면 먼저 온 순서 (11강)
정렬 기준을 잘못 잡으면 조작하기 쉬운 목록이 됩니다.
Python 브라우저에서 실행
🤔 확인 문제
인기순 정렬에서 판매량이 같은 신상품들의 순서가 새로고침마다 바뀝니다. 가장 올바른 해결책은?
🤔 확인 문제
sorted(상품, key=lambda s: (s["판매"], s["이름"]), reverse=True) 의 결과는?
🤔 확인 문제
페이지를 넘겼는데 1페이지에서 본 상품이 2페이지에도 나옵니다. 가장 유력한 원인은?