파이썬 딕셔너리 정렬하기

Kyle·2020년 11월 23일
7
post-thumbnail
post-custom-banner

1. sorted를 이용한 정렬

d = {..}
>>> sorted(d)
  • dict 안의 key를 올림차순으로 정렬한 key 리스트를 반환해준다.
    이때 key가 아닌 value로 정렬하려면 lambda를 사용해주면 된다.

1-1. value값 기준으로 정렬하기

>>> sorted(d, key= lambda x : dict[x])
  • value값을 기준으로 정렬한 key 리스트를 반환해 준다.
    내림차순은 reverse = True라는 옵션을 뒤에 붙여주면 된다.

2. items()를 이용한 정렬

>>> sorted(d.items(), key=lambda x : x[1])
  • 딕셔너리에 items() 메서드를 사용해주면 {"key" : value}의 형태를 [(key, value)]의 형태로 만들어 준다.
  • 이를 sorted해주면 key값을 기준으로 오름차순으로 정렬해준다. value값으로 정렬하려면 lambda를 사용해주면 된다.
  • 정렬된 list값을 dictionary로 바꿔주려면 dict()메서드를 마지막에 써주면 된다.
    >>> dict(sorted(d.items(), key=lambda x : x[1]))

3. itemgetter를 사용한 정렬

  • python의 내장모듈 operator를 이용한 정렬
    • 구버전 파이썬에서 사용됐던 모듈이다.
from operator import itemgetter

d = {'wecode':1, 'ryan':2, 'wework':3}
sort_d = sorted(d, key = itemgetter(0))
>>> sort_d = ['ryan', 'wecode', 'wework']
  • itemgetter안에는 키값이 들어갈수도 있고, 인덱스를 넣어줄수도 있다. 위의 예제는 0번쨰 인덱스 즉, 정렬기준은 key자체가 된다. 먄약 인자를 1로 바꿔주면 value가 기준이 되고 다음과 같은 결과를 얻을 수 있다.
>>> sortdic = ['wecode', 'wework', 'ryan']
  • itemgetters는 안에 하나이상의 값이 들어가면 먼저 기준에 따라 정렬하고, 동일한 값이 나올 경우 다음 기준으로 다시 정렬한다. 해당 method에 옵션으로 reverse=True를 해주면 내림차순으로 정렬이 된다.
  • itemgetters또한 items() 메서드와 함께 사용하여 lists of tuple 형태로 나타낼 수 있으며, 해당 결과값을 dict() 메서드를 통해 list에서 dictionary 형태로 변환시킬 수 있다.

예제

from operator import itemgetter
  
                .
                .
                .
total_hearts_list = [
	{
		"img_id" : d['pk'],
		"total_hearts" : Cloth.objects.get(id = d['pk']).total_hearts
	} for d in hearts_list
    ]
data = sorted(total_hearts_list, key = itemgetter('total_hearts'))                      

total_hearts_list라는 list에서 key가 total_hearts인 값들을 오름차순으로 정렬한 code이다.
itemgetter에는 하나 이상의 값을 넣어서 순서대로 정렬시킬 수 있다.

profile
깔끔하게 코딩하고싶어요
post-custom-banner

0개의 댓글