다음과 같이 목록 목록이나 튜플 목록에 데이터가 있습니다.
data = [[1,2,3], [4,5,6], [7,8,9]]
data = [(1,2,3), (4,5,6), (7,8,9)]
그리고 하위 집합의 두 번째 요소별로 정렬하고 싶습니다. 2,5,8에 의해 정렬 의미 2
에서이다 (1,2,3)
, 5
에서이다 (4,5,6)
. 이 작업을 수행하는 일반적인 방법은 무엇입니까? 튜플 또는 목록을 내 목록에 저장해야합니까?
답변
sorted_by_second = sorted(data, key=lambda tup: tup[1])
또는:
data.sort(key=lambda tup: tup[1]) # sorts in place
답변
from operator import itemgetter
data.sort(key=itemgetter(1))
답변
위의 주석 이외의 다른 방법은 배열을이 행에 추가하는 것입니다.
reverse = True
결과는 다음과 같습니다.
data.sort(key=lambda tup: tup[1], reverse=True)
답변
예를 들어 튜플의 두 번째 및 세 번째 요소를 기준으로 여러 기준으로 정렬하려면
data = [(1,2,3),(1,2,1),(1,1,4)]
우선 순위를 설명하는 튜플을 반환하는 람다를 정의하십시오.
sorted(data, key=lambda tup: (tup[1],tup[2]) )
[(1, 1, 4), (1, 2, 1), (1, 2, 3)]
답변
Stephen의 대답 은 내가 사용하는 것입니다. 완성도를 높이기 위해 다음과 같은 목록 이해 기능이있는 DSU (장식-정렬-비 장식) 패턴이 있습니다.
decorated = [(tup[1], tup) for tup in data]
decorated.sort()
undecorated = [tup for second, tup in decorated]
또는 더 간결하게 :
[b for a,b in sorted((tup[1], tup) for tup in data)]
Python Sorting HowTo 에서 언급했듯이 , 주요 기능을 사용할 수있게 된 Python 2.4부터는 불필요합니다.
답변
튜플의리스트를 정렬하려면 (<word>, <count>)
를 들어, count
내림차순 및 word
알파벳 순서 :
data = [
('betty', 1),
('bought', 1),
('a', 1),
('bit', 1),
('of', 1),
('butter', 2),
('but', 1),
('the', 1),
('was', 1),
('bitter', 1)]
이 방법을 사용합니다.
sorted(data, key=lambda tup:(-tup[1], tup[0]))
결과가 나옵니다.
[('butter', 2),
('a', 1),
('betty', 1),
('bit', 1),
('bitter', 1),
('bought', 1),
('but', 1),
('of', 1),
('the', 1),
('was', 1)]
답변
람다없이 :
def sec_elem(s):
return s[1]
sorted(data, key=sec_elem)
