홈>
reverse=True
를 사용하여 사전을 먼저 정렬해야합니다.
, 반복되는 값의 경우 키를 기준으로 정렬 (
reverse=False
)
지금까지 나는 이것을 가지고있다
dict = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
sorted(dict.items(), key=lambda x: (x[1],x[1]), reverse=True)
이것은 ...
[('B', 3), ('A', 2), ('J', 1), ('I', 1), ('A', 1)]
하지만 필요합니다 :
[('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
보시다시피, 값이 같으면 지정된대로 감소하는 방식으로 만 키를 정렬 할 수 있습니다. 그러나 어떻게 증가하는 방식으로 키를 정렬 할 수 있습니까?- 답변 # 1
- 답변 # 2
In [4]: l = [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)] In [5]: sorted(l, key=lambda (x,y):(-y,x)) Out[5]: [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
- 답변 # 3
collections.defaultdict
를 사용할 수 있습니다 :In [48]: from collections import defaultdict In [49]: dic=[('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)] In [50]: d=defaultdict(list) In [51]: for x,y in dic: d[y].append(x) d[y].sort() #sort the list
지금
d
다음과 같습니다.defaultdict(<type 'list'>, {1: ['A', 'I', 'J'], 2: ['A'], 3: ['B']}
즉 새로운
dict
1,2,3...
와 함께 값으로 목록에 저장된 키 및 해당 알파벳으로.이제
sorted(d.items)
를 반복 할 수 있습니다itertools.chain()
를 사용하여 원하는 결과를 얻습니다. 그리고itertools.product()
.In [65]: l=[ product(y,[x]) for x,y in sorted(d.items(),reverse=True)] In [66]: list(chain(*l)) Out[66]: [('B', 3), ('A', 2), ('A', 1), ('I', 1), ('J', 1)]
관련 자료
- sql - 첫 번째 행 열에 두 번째 행 값을 인쇄하려면 어떻게해야합니까?
- python - 다른 csv 파일에서 두 번째 열의 동일한 ID와 값을 합산하고 Pandas를 사용하여 결과를 새 csv에 저장하는 방법은 무엇입니까?
- c - 첫 번째 % s scanf 값은 무시되지만 두 번째 % s는 값을 저장할 수 있습니다
- python - 내림차순 값을 변경하지 않고 동일한 값을 가진 경우 목록에서 튜플을 알파벳순으로 정렬하는 방법은 무엇입니까?
- swift 5에서 [string - float] 사전에서 두 번째 낮은 값의 키를 검색하는 방법은 무엇입니까?
- python - 하위 목록 안에 튜플이있는 목록에서 가장 작은 값 찾기
- bash - 값을 두 번째 파일의 값으로 바꾸기
- r - 다른 벡터에있는 특정 객체의 벡터에서 두 번째로 큰 값
- mysql - 첫 번째 열의 값을 기준으로 SQL 순서 두 번째 열
- pandas - Python 열에서 반복되는 값으로 두 번째 마지막 고유 값 검색
- python - 목록의 두 번째 값을 사용하여 for 루프의 초기 실행 중에 작업을 수행합니다
관련 질문
- python : 중첩된 사전을 문자로 정렬하는 방법은 무엇입니까?
- python : 다차원 사전 이해(파이썬)
- python : 파이썬에서 클래스 메서드를 호출할 수 없습니다.
- python : 인코딩 중 해시 유형 오류 없이 사전을 되돌릴 수 없습니다.
- python : 목록 및 사전의 이 기능을 이해할 수 없습니다.
- python : 람다를 이용한 문자열 정렬
- python : 모든 사전 및 변수 인쇄 [중복]
- Pandas를 사용하지 않고 Python에서 행별로 CSV 파일을 편집하는 방법
- python : 람다 함수를 사용하여 사전에 액세스하고 새 사전으로 재정렬
- python : 서로 다른 수준의 두 목록이 있는 중첩 JSON 파일 분해
다음은 입력과 함께 작동합니다 :
'값'이 숫자이므로 부호를 변경하여 정렬 순서를 쉽게 바꿀 수 있습니다.
다시 말해,이 정렬은 사물을 가치별로 정렬합니다 (-x[1]
) (음수 부호는 큰 숫자를 먼저 표시)와 같은 숫자의 경우 키 (x[0]
)에 따라 주문 ).큰 항목을 먼저 배치하기 위해 값을 쉽게 "부정 화"할 수없는 경우 쉬운 해결 방법은 두 번 정렬하는 것입니다.
파이썬의 정렬이 안정적이기 때문에 작동합니다.