2017-04-15 1 views
-3

저는 초급 프로그래머입니다. 나는 승리와 게임의 수에 따라 게임 결과 순서를 반환하는 코드를 만들기 위해 고심하고 있습니다. 예를 들어,이중 사전을 정렬하는 방법? (Python3)

teams = { 
'Arsenal FC': { 
    'name': 'Arsenal FC', 
    'wins': 4, 
    'games_played': 15, 
}, 
'Chelsea FC': { 
    'name': 'Chelsea FC', 
    'wins': 6, 
    'games_played': 16, 
}, 
'Madrid Real': { 
    'name': 'Madrid Real', 
    'wins': 4, 
    'games_played': 11, 
} 
} 

이 사건은,이 목록과 같은 이상 반환 할 :

[ 
{ 
'Chelsea FC': { 
    'name': 'Chelsea FC', 
    'wins': 6, 
    'games_played': 16, 
}, 
'Madrid Real': { 
    'name': 'Madrid Real', 
    'wins': 4, 
    'games_played': 11, 
}, 
'Arsenal FC': { 
    'name': 'Arsenal FC', 
    'wins': 4, 
    'games_played': 15, 
} 
] 

이 팀은 가장 상위해야했다. 승리 횟수가 다른 팀과 같으면 팀에서 game_played가 적게 생깁니다. 나쁜 영어 실력을해서 미안합니다. 내가 원하는 것을 이해할 수 없다면, 물어보십시오. 세부 사항을 설명해 주시면 대단히 감사하겠습니다 !!

답변

4

당신은 sorted()에 "정렬 키"를 전달할 수 있습니다

>>> sorted(teams.items(), key=lambda x:(-x[1]["wins"], x[1]["games_played"])) 
[('Chelsea FC', {'games_played': 16, 'name': 'Chelsea FC', 'wins': 6}), 
('Madrid Real', {'games_played': 11, 'name': 'Madrid Real', 'wins': 4}), 
('Arsenal FC', {'games_played': 15, 'name': 'Arsenal FC', 'wins': 4})] 

이 예에서 정확한 사전 구조를 얻으려면, 당신이 할 수있는

>>> [{k:v} for k,v in sorted(teams.items(), key=lambda x:(-x[1]["wins"], x[1]["games_played"]))] 
[{'Chelsea FC': {'games_played': 16, 'name': 'Chelsea FC', 'wins': 6}}, 
{'Madrid Real': {'games_played': 11, 'name': 'Madrid Real', 'wins': 4}}, 
{'Arsenal FC': {'games_played': 15, 'name': 'Arsenal FC', 'wins': 4}}] 

설명 :

x[1]은 반복되는 각 사전 항목의 값입니다. -을 추가하여 가장 큰 값에서 가장 작은 값으로 정렬 할 수 있습니다. 둘 이상의 기준으로 정렬하려는 경우 값을 정렬하는 튜플 만 사용하십시오.

+0

친절한 설명에 감사드립니다. – user7421972

관련 문제