質問は:
voting_borda:
(strのリストのリスト)->(str、intのリスト)のタプル
パラメータは、1回のライディングのランク投票用紙を表す4要素リストのリストです。
ボルダ得点は、ランキングに従ってポイントを割り当てることによって決定されます。パーティーは、第1選択のランクごとに3ポイント、第2選択のランクごとに2ポイント、第3選択のランクごとに1ポイントを獲得します。(4位にランク付けされた場合、ポイントは付与されません。)たとえば、上記のランク投票用紙は、リベラルカウントに3ポイント、グリーンカウントに2ポイント、CPCカウントに1ポイント貢献します。最も多くのポイントを獲得したパーティーが席を獲得します。
最初の要素がボルダカウントによる勝者の名前であり、2番目の要素が各パーティーの合計ポイント数を含む4要素のリストであるタプルを返します。リスト要素の順序は、PARTY_INDICESのパーティの順序に対応しています。
これは私のコードです:
def voting_borda(*args):
results = {}
for sublist in args:
for i in range(0, 3):
if sublist[i] in results:
results[sublist[i]] += 3-i
else:
results[sublist[i]] = 3-i
winner = max(results, key=results.get)
results_sort = sorted(results,key=lambda x:x[1],reverse=True)
return winner, results_sort
しかし、私が試してみると
voting_borda(['GREEN','NDP', 'LIBERAL', 'CPC'],['GREEN','CPC','LIBERAL','NDP'],['LIBERAL','NDP', 'CPC', 'GREEN'])
わかった、
('GREEN', {'NDP': 4, 'CPC': 3, 'GREEN': 6, 'LIBERAL': 5})
ただし、最初のパラメーターを勝者(その部分は問題ありません)にし、2番目のパラメーターを値だけにし、PARTY_INDICESの順序にする必要があり
PARTY_INDICES = [NDP_INDEX, GREEN_INDEX, LIBERAL_INDEX, CPC_INDEX]
ます。
これを改善できる解決策や方法はありますか?