-
다중 리스트/딕셔너리 값으로 정렬하기 with lambda카테고리 없음 2022. 9. 20. 19:12반응형
1. 이중 리스트에서 내부 값을 통해 정렬하기
# 이중 리스트 준비 lst = [ [1,2,3], [7,7,8], [6,3,8], [9,6,1] ] print('원본',lst) #=> 원본 [[1, 2, 3], [7, 7, 8], [6, 3, 8], [9, 6, 1]] lst1 = sorted(lst) print('case1 : ',lst1) #=> case1 : [[1, 2, 3], [6, 3, 8], [7, 7, 8], [9, 6, 1]] lst2 = sorted(lst,key=lambda x: x[1]) print('case2 : ',lst2) #=> case2 : [[1, 2, 3], [6, 3, 8], [9, 6, 1], [7, 7, 8]] lst3 = sorted(lst,key=lambda x: x[2]) print('case3 : ',lst3) #=> case3 : [[9, 6, 1], [1, 2, 3], [7, 7, 8], [6, 3, 8]] #sorted(lst,key=lambda x: x[2], reverse=True) #sorted(lst,key=lambda x: x[2], reverse=False) 를 통해서 오름차순 내림차순 설정 가능
case1(lst1)에서는 기본 정렬시 내부 리스트의 첫번째 값을 기준으로 정렬 됨을 볼 수 있다.
case2,3에서는 key지정에서 lambda를 사용하여 내부 리스트의 2,3번째 값을 통해 정렬됨을 볼 수 있다.
2. 이중 딕셔너리에서 내부 값을 통해 정렬하기
2.1 내부 리스트 케이스
# 이중 딕셔너리 준비, 이때 내부 값은 리스트이다 dic = { 'id01':[1,2,3], 'id05':[49,32,1], 'id03':[2,3,15], } print(dic) #=> {'id01': [1, 2, 3], 'id05': [49, 32, 1], 'id03': [2, 3, 15]} dic1 = sorted(dic) print('case1 : ',dic1) #=> case1 : ['id01', 'id03', 'id05'] dic2 = dict(sorted(dic.items(),key=lambda x: x[1])) print('case2 : ',dic2) #=> case2 : {'id01': [1, 2, 3], 'id03': [2, 3, 15], 'id05': [49, 32, 1]} dic3 = dict(sorted(dic.items(),key=lambda x: x[1][2])) print('case3 : ',dic3) #=> case3 : {'id05': [49, 32, 1], 'id01': [1, 2, 3], 'id03': [2, 3, 15]}
case1(dic1)에서는 기본정렬 결과 딕셔너리의 키값에 대해서 정렬됨을 알 수 있다
내부 값을 기준으로 정렬하고 싶을 경우 lambda를 통해 지정해야한다
case2,3에서는 내부 리스트의 2,3번째 값을 통해서 정렬되었다
정렬된 값은 리스트로 반환되기 때문에 다시 dict로 형변환을 해줘야 딕셔너리로 사용할 수 있다
2.2 내부 딕셔너리 케이스
# 이중딕셔너리 준비, 이때 내부값은 딕셔너리이다 dic = { 'id01':{'a':1,'b':2}, 'id05':{'a':49,'b':32}, 'id03':{'a':2,'b':3} } print(dic) #=> {'id01': {'a': 1, 'b': 2}, 'id05': {'a': 49, 'b': 32}, 'id03': {'a': 2, 'b': 3}} dic1 = sorted(dic) print('case1 : ',dic1) #=> case1 : ['id01', 'id03', 'id05'] dic2 = dict(sorted(dic.items(),key=lambda x: x[1]['a'])) print('case2 : ',dic2) #=> case2 : {'id01': {'a': 1, 'b': 2}, 'id03': {'a': 2, 'b': 3}, 'id05': {'a': 49, 'b': 32}} dic3 = dict(sorted(dic.items(),key=lambda x: x[1]['b'])) print('case3 : ',dic3) #=> case3 : {'id01': {'a': 1, 'b': 2}, 'id03': {'a': 2, 'b': 3}, 'id05': {'a': 49, 'b': 32}}
2.1과 유사하나 내부가 딕셔너리이기때문에 인덱스 대신 키값으로 접근함을 볼 수 있다
이때 딕셔너리는 순서를 가지지 않기 때문에 lambda x: x[1]로 접근하면 에러가 발생한다
반응형