ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 리스트/딕셔너리 정렬하기
    개발/파이썬 2017.12.11 22:07

    파이썬 리스트와 딕셔너리 간단한 정렬 예제입니다. (나중에 찾기 위해 기록)

    리스트는 기본적으로 sort 라는 함수를 가지고 있지만 

    딕셔너리는 sorted 의 힘을 빌려야 합니다. 


    1
    data2 = sorted(data.items(), key=lambda x: x[1][0], reverse=False)
    cs


    sorted(1st pmt,  2nd pmt, 역순 여부)

    1st 인수에 있는 항목들을 하나씩 꺼내서 두 번째 lambda 함수에 파라미터 x 로 대입하고 정렬하는 방식입니다.

    x[1][0] --> data.items[1][0] 이 되고 아래 예제에서 data.items[1] 은 (key: value) 의 value 에 해당하고  data.items[1][0] 은 결국 value를 이루는 투플의 첫번째 항목이 되는 식입니다.

    단, sorted 함수의 결과는 원하는 순서로 정렬된 list 입니다 


    리스트와 딕셔너리 정렬하기 예제 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    import operator
     
     
    print('----------------')
    print('list sorting')
    list = [10305020]
    print(list)
    list2 = list
    list.sort()
    print(list2)
     
    print('----------------')
    print('simple dictionanry  sorting')
    dic1 = {'영희' : 80 , '철수' : 90'혜영' : 70}
    print(dic1)
    print('딕셔너리 - VALUE 로 소팅')
    dic2 = sorted(dic1.items(), key=operator.itemgetter(1))
    print(dic2)
     
    print('딕셔너리 - KEY 로 소팅')
    dic2 = sorted(dic1.items(), key=operator.itemgetter(0))
    print(dic2)
     
    print('----------------')
    print('tuple 배열로 이뤄진 딕서너리를 소팅 하기')
     
    data = {}
    data['영희'= (809590)
    data['철수'= (908070)
    data['혜영'= (7010090)
     
    print(data)
    # sorted(data.items(), key=lambda x: x[1][0], reverse=False)
    # sort(1, 2, 3) --> 1 번째 iteratable 파라미터가 하나씩 2번째 수식에 대입되어 돌아 간다.
    print('tuple 의 1번째 항목으로 소팅')
    data2 = sorted(data.items(), key=lambda x: x[1][0], reverse=False)
    print(data2)
     
     
    print('tuple 의 2번째 항목으로 소팅')
    data2 = sorted(data.items(), key=lambda x: x[1][1], reverse=False)
    print(data2)
     
     
    print('tuple 의 3번째 항목으로 소팅')
    data2 = sorted(data.items(), key=lambda x: x[1][2], reverse=False)
    print(data2)
     
    print('----------------')
    print('딕셔너리 배열로 이뤄진 딕셔너리를 정렬하기')
    data['영희'= {'국어'80'수학'95'영어'80}
    data['철수'= {'국어'90'수학'80'영어'70}
    data['혜영'= {'국어'70'수학'100'영어'90}
    print(data)
     
    print('국어 성적으로 소팅')
    data2 = sorted(data.items(), key=lambda x: x[1]['국어'], reverse=False)
    print(data2)
     
    print('영어 성적으로 소팅')
    data2 = sorted(data.items(), key=lambda x: x[1]['영어'], reverse=False)
    print(data2)
     
     
     
     
    cs

    예제에서 딕셔너리를

    • key, value 중 하나로 소팅하는 방법
    • value 가 tuple 일 경우 tuple 의 1,2,3 번째 항목으로 소팅하는 방법
    • value 가 또 다른 딕셔너리일 때 딕셔너리의 이름별로 소팅하는 방법

    을 다뤘습니다.


    결과

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    D:\dev\Anaconda3\python.exe D:/dev/prj/hello/sort.py
    ----------------
    list sorting
    [10305020]
    [10203050]
    ----------------
    simple dictionanry  sorting
    {'영희'80'철수'90'혜영'70}
    딕셔너리 - VALUE 로 소팅
    [('혜영'70), ('영희'80), ('철수'90)]
    딕셔너리 - KEY 로 소팅
    [('영희'80), ('철수'90), ('혜영'70)]
    ----------------
    tuple 배열로 이뤄진 딕서너리를 소팅 하기
    {'영희': (809590), '철수': (908070), '혜영': (7010090)}
    tuple 의 1번째 항목으로 소팅
    [('혜영', (7010090)), ('영희', (809590)), ('철수', (908070))]
    tuple 의 2번째 항목으로 소팅
    [('철수', (908070)), ('영희', (809590)), ('혜영', (7010090))]
    tuple 의 3번째 항목으로 소팅
    [('철수', (908070)), ('영희', (809590)), ('혜영', (7010090))]
    ----------------
    딕셔너리 배열로 이뤄진 딕셔너리를 정렬하기
    {'영희': {'국어'80'수학'95'영어'80}, '철수': {'국어'90'수학'80'영어'70}, '혜영': {'국어'70'수학'100'영어'90}}
    국어 성적으로 소팅
    [('혜영', {'국어'70'수학'100'영어'90}), ('영희', {'국어'80'수학'95'영어'80}), ('철수', {'국어'90'수학'80'영어'70})]
    영어 성적으로 소팅
    [('철수', {'국어'90'수학'80'영어'70}), ('영희', {'국어'80'수학'95'영어'80}), ('혜영', {'국어'70'수학'100'영어'90})]
     
    Process finished with exit code 0
     
    cs




    댓글 0

Designed by black7375.