2017-04-15 4 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

関連する問題