두 번째 항목 (정수 값)으로 튜플 목록 정렬
이 질문에는 이미 답변이 있습니다.
다음과 같은 튜플 목록이 있습니다.
[('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
튜플 내부의 정수 값 으로이 목록을 오름차순으로 정렬하고 싶습니다. 가능합니까?
key
와 키워드를 사용해보십시오 sorted()
.
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda x: x[1])
key
데이터 구조에서 비교 가능한 요소를 검색하는 방법을 식별하는 함수 여야합니다. 귀하의 경우 튜플의 두 번째 요소이므로에 액세스 [1]
합니다.
최적화에 대해서는 itemgetter(1)
기본적으로 더 빠른 버전 인을 사용하여 jamylak의 응답을 참조하십시오 lambda x: x[1]
.
>>> from operator import itemgetter
>>> data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
>>> sorted(data,key=itemgetter(1))
[('abc', 121), ('abc', 148), ('abc', 221), ('abc', 231)]
itemgetter
이 경우 @cheeken의 솔루션보다 IMO를 사용하는 것이 더 읽기 쉽습니다. 또한 거의 모든 계산이을 c
사용하는 대신 측면에서 수행되기 때문에 더 빠릅니다 lambda
.
>python -m timeit -s "from operator import itemgetter; data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=itemgetter(1))"
1000000 loops, best of 3: 1.22 usec per loop
>python -m timeit -s "data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]" "sorted(data,key=lambda x: x[1])"
1000000 loops, best of 3: 1.4 usec per loop
파이썬 신 생물로서, 데이터가 실제로 다음과 같이 보인다면 언급하고 싶었습니다.
data = [('abc', 121),('abc', 231),('abc', 148), ('abc',221)]
그런 다음 sorted()
첫 번째 요소가 모두 동일하므로 튜플의 두 번째 요소를 기준으로 자동 정렬합니다.
Cheeken의 답변에 추가하면, 두 번째 항목별로 튜플 목록을 내림차순으로 정렬하는 방법 입니다.
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)],key=lambda x: x[1], reverse=True)
파이썬 위키에서 :
>>> from operator import itemgetter, attrgetter
>>> sorted(student_tuples, key=itemgetter(2))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
>>> sorted(student_objects, key=attrgetter('age'))
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
전체 정렬의 경우
foo = [(list of tuples)]
foo.sort(key=lambda x:x[0]) #To sort by first element of the tuple
람다 회피 방법의 경우 먼저 자신의 기능을 정의하십시오.
def MyFn(a):
return a[1]
그때:
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=MyFn)
의 경우 Python 2.7+
허용되는 답변을 약간 더 읽기 쉽게 만듭니다.
sorted([('abc', 121),('abc', 231),('abc', 148), ('abc',221)], key=lambda (k, val): val)
OP의 정렬 값이 정수라는 사실은 질문 자체와 관련이 없습니다. 즉, 정렬 값이 텍스트 인 경우 허용되는 답변이 작동합니다. 정렬 중에 정렬을 수정할 수 있음을 지적하기 위해이를 가져옵니다 (예 : 대문자와 소문자를 설명하기 위해).
>>> sorted([(121, 'abc'), (231, 'def'), (148, 'ABC'), (221, 'DEF')], key=lambda x: x[1])
[(148, 'ABC'), (221, 'DEF'), (121, 'abc'), (231, 'def')]
>>> sorted([(121, 'abc'), (231, 'def'), (148, 'ABC'), (221, 'DEF')], key=lambda x: str.lower(x[1]))
[(121, 'abc'), (148, 'ABC'), (231, 'def'), (221, 'DEF')]
참고 URL : https://stackoverflow.com/questions/10695139/sort-a-list-of-tuples-by-2nd-item-integer-value
'development' 카테고리의 다른 글
모든 분기에서 문자열을 도입 한 Git 커밋을 찾는 방법은 무엇입니까? (0) | 2020.02.28 |
---|---|
Git 콘솔을 색칠하는 방법? (0) | 2020.02.28 |
jQuery를 사용하여“disabled”속성을 제거하는 방법은 무엇입니까? (0) | 2020.02.28 |
C #이 % AppData %의 경로를 얻는 중 (0) | 2020.02.28 |
Xcode 9“iPhone이 사용 중 : iPhone에 대한 디버거 지원 준비” (0) | 2020.02.28 |