파이썬에서 람다로 정렬하는 방법


179

파이썬에서 람다로 날짜별로 정렬하려고합니다. 내 오류 메시지를 이해할 수 없습니다. 메시지는 다음과 같습니다

<lambda>() takes exactly 1 argument (2 given)

내가 가진 줄은

a = sorted(a, lambda x: x.modified, reverse=True)

8
keywoard 인수를 추가 key = lambda x : x.modified는 문제를 해결합니다
shahjapan

답변:


325

사용하다

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

Python 2.x에서 sorted함수는 다음 순서로 인수를 사용합니다.

sorted(iterable, cmp=None, key=None, reverse=False)

따라서가 없으면 key=전달하는 cmp함수는 2 개의 인수를 취하는 함수 로 간주됩니다 .


13
이 경험에서 전달 된 키워드 매개 변수를 이해하는 방법을 배울 수 있습니다.
Tony Veijalainen

1
이것은 매우 오래되었지만 오류 코드가 왜 오해의 소지가 있는지 알고 있습니까? 함수가 2를 취하기 lambda때문에 파이썬이 다른 매개 변수를 제공 하는 것처럼 들립니다 cmp.
SuperBiasedMan

@SuperBiasedMan 오류가 오도되지 않습니다. cmp비교기 함수는 두 개의 인수를 취합니다. 을 전달하도록 지정하지 않으면 key함수 매개 변수 순서에서 비교자를 전달한다고 가정합니다. 람다는 하나의 매개 변수를 사용하므로 유효한 비교기가 아니며 오류가 말합니다.
Jezor

19
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)

다음과 같이 인쇄됩니다.

[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]

문자열 정수에는 작동하지 않습니다. 이것 좀 봐! lst = [( '999', '9'), ( '303', '30'), ( '343', '34')] lst.sort (key = lambda x : x [1]) print (lst )
Daniel Kua

결과는 [( '303', '30'), ( '343', '34'), ( '999', '9')]이며 이는 모든 목록의 두 번째 요소를 기준으로 정렬되지 않습니다.
다니엘 쿠아

lst = [( 'candy', '999', '9'), ( 'apple', '303', '30'), ( 'baby', '343', '34')] lst.sort (키 = lambda x : x [2]) print (lst)
Daniel Kua

[( 'apple', '303', '30'), ( 'baby', '343', '34'), ( 'candy', '999', '9')]. 어느 것도 2 요소를 기준으로 정렬되지 않습니다!
다니엘 쿠아

8

파이썬리스트에는 데이터를 정렬하는 두 가지 기본 방법이 있습니다.

sort()  A method that modifies the list in-place
sorted()  A built-in function that builds a new sorted list from an iterable

요구 사항에 따라 다음 두 가지 중에서 선택할 수 있습니다.

원본 목록을 유지하려면 정렬 기능을 사용하거나 원본 목록이 필요하지 않으면 정렬 기능을 사용할 수 있습니다.

정렬 또는 정렬하기 전에 람다를 이해해야합니다.

람다는 익명 함수이고 익명 함수는 이름없이 정의 된 함수입니다.이 게시물은 꽤 잘 설명하는 것 같습니다.

https://www.programiz.com/python-programming/anonymous-function

Lambda 함수는 평가 및 반환되는식이 하나뿐이므로 인라인 호출에 유용합니다. 람다 구문은 다음과 같습니다.

람다 인수 : 표현

정렬 된 함수를 사용하는 방법을 보자 :

student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2]) 

출력 : [( 'dave', 'B', 10), ( 'jane', 'B', 12), ( 'john', 'A', 15)]

여기 tuples가있는 student_tuples리스트가 student [2] 인 경우 주요 매개 변수를 기준으로 정렬 된 것을 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.