TIL DAY 20 || Python Setdefault(), Sorted() method

TK·2021년 3월 12일
0

TIL

목록 보기
28/55
post-thumbnail

숫자로 이루어진 배열 nums 에서 가장 많이 등장한 숫자를 k 만큼 리턴하는 알고리즘 문제를 풀다가

sorted() 내장메소드에 대해 좀 더 깊게 공부하게 되었고 생각보다 많은 기능을 제공해준다는 것을 깨달았다.

추가적으로 자주 애용하고 있던 dictionary 내장 메소드setdefault() 에 대해서도 설명해보려고 한다.

def top_k(nums, k):
  num_frequency = dict()
  for n in nums:
    num_frequency.setdefault(n, 0)
    num_frequency[n] += 1
  
  sorted_nums_by_val = sorted(num_frequency.items(), key= lambda x: -x[1])

  result = list()
  for i in range(k):
    result.append(sorted_nums_by_val[i][0])

  return result
  • num_frequency 의 key: value pair 를 setdefault 함수로 지정해놓았다. 키 에러가 나지 않게 하기 위함이다. setdefault 를 쓰지 않고 조건문으로 구현할 수는 있지만 setdefault 를 안 쓸 이유가 없다.

  • sorted 함수의 첫 번째 인자로 num_frequency.items(), 즉 (key, value) pair 의 튜플 값 변환한다.

  • 그리고 sorted 에는 key 라는 키워드 파라미터를 받는데, key 를 기준으로 정렬하겠다는 의미이다.

  • key= lambda x: <조건문> 형식으로 같이 오게된다.

  • 나는 여기서 튜플의 두 번째 인덱스인 value 값을 기준으로 내림차순으로 정렬하고 싶어서 key = lambda x: -x[1] 으로 작성하였다.

  • value 기준 오름차순으로 작성하고 싶다면 - 없이 x[1] 으로 작성하면 된다.

  • 또한 여러 key 값을 기준으로 정렬할 수도 있다. 이럴 때는 lambda x: (x[0], -x[1]) 와 같이 튜플로 나타내주면 된다. 이는 key 를 기준으로 먼저 오름차순으로 정렬하고, 앞에서 정렬되었던 기준을 만족하면서 다시 value 를 기준으로 정렬한다는 의미이다.

강력한 sorted() 메소드에 대해 알아보았으며, 앞으로 자주 사용할 것 같다.

profile
Backend Developer

0개의 댓글