ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다중 리스트/딕셔너리 값으로 정렬하기 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]로 접근하면 에러가 발생한다

     

    반응형

    댓글

Designed by Tistory.