[python] 사전 sorted 함수 자세히 (고급 편)

12324 단어 python

이전 글에서: dict 사전의 키 키나 값value 정렬에 따라sorted가 키나 값에 따라 정렬하는 방법을 사용하여 사전의 정렬 문제를 해결했습니다.본고는sorted의 강함을 더욱 상세하게 소개할 것이다.


sorted는 집합을 정렬하는 데 사용됩니다. (여기 집합은 교체 가능한 대상에 대한 통칭입니다. 목록, 사전, set, 심지어 문자열일 수도 있습니다.) 그 기능은 매우 강력합니다.

1. 목록을 정렬하면 되돌아오는 대상은 원래 목록을 바꾸지 않는다

list = [1,5,7,2,4]

sorted(list)
Out[87]: [1, 2, 4, 5, 7]
# , , reverse = False  
sorted(list,reverse=False)
Out[88]: [1, 2, 4, 5, 7]

sorted(list,reverse=True)
Out[89]: [7, 5, 4, 2, 1]

2. 사용자 정의 규칙에 따라 정렬하고 매개 변수를 사용합니다: 키

#  key, lambda 
sorted(chars,key=lambda x:len(x))
Out[92]: ['a', 'is', 'boy', 'bruce', 'handsome']

sorted(chars,key=lambda x:len(x),reverse= True)
Out[93]: ['handsome', 'bruce', 'boy', 'is', 'a']

3. 사용자 정의 규칙에 따라 정렬하고 원조로 구성된 목록을 정렬한다

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]
#key=lambda x: x[1] x 
sorted(tuple_list, key=lambda x: x[1])  

Out[94]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

sorted(tuple_list, key=lambda x: x[0])
Out[95]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]

sorted(tuple_list, key=lambda x: x[2])
Out[96]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

4. 정렬된 요소는 사용자 정의 클래스입니다

class tuple_list:
     def __init__(self, one, two, three):
         self.one = one
         self.two = two
         self.three = three
     def __repr__(self):
         return repr((self.one, self.two, self.three))


tuple_list_ = [tuple_list('A', 1,5), tuple_list('B', 3,2), tuple_list('C', 2,6)]

sorted(tuple_list_, key=lambda x: x.one)
Out[104]: [('A', 1, 5), ('B', 3, 2), ('C', 2, 6)]

sorted(tuple_list_, key=lambda x: x.two)
Out[105]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

sorted(tuple_list_, key=lambda x: x.three)
Out[106]: [('B', 3, 2), ('A', 1, 5), ('C', 2, 6)]

5.sorted는 여러 필드에 따라 정렬할 수 있다

class tuple_list:
     def __init__(self, one, two, three):
         self.one = one
         self.two = two
         self.three = three
     def __repr__(self):
         return repr((self.one, self.two, self.three))


tuple_list_ = [tuple_list('C', 1,5), tuple_list('A', 3,2), tuple_list('C', 2,6)]
#  one , two 
sorted(tuple_list_, key=lambda x:(x.one, x.two))
Out[112]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]

6、operator의itemgetter방법과attrgetter방법을 사용

tuple_list = [('A', 1,5), ('B', 3,2), ('C', 2,6)]

class tuple_list_class:
     def __init__(self, one, two, three):
         self.one = one
         self.two = two
         self.three = three
     def __repr__(self):
         return repr((self.one, self.two, self.three))


tuple_list_ = [tuple_list_class('C', 1,5), tuple_list_class('A', 3,2), tuple_list_class('C', 2,6)]

from operator import itemgetter
sorted(tuple_list, key=itemgetter(1))

Out[119]: [('A', 1, 5), ('C', 2, 6), ('B', 3, 2)]

from operator import attrgetter
sorted(tuple_list_, key=attrgetter('one'))  # attrgetter  str

Out[120]: [('A', 3, 2), ('C', 1, 5), ('C', 2, 6)]

#  , 
from operator import attrgetter
sorted(tuple_list_, key=attrgetter('two','one'))

Out[121]: [('C', 1, 5), ('C', 2, 6), ('A', 3, 2)]

좋은 웹페이지 즐겨찾기