0

重複の可能性:
出力を少し変更する

質問は:

voting_borda:

(str のリストのリスト) -> (str, int のリスト) のタプル

パラメーターは、1 回の乗馬のランク投票を表す 4 要素リストのリストです。

ボルダカウントは、ランキングに応じてポイントを割り当てて決定されます。パーティーは、第 1 選択のランキングごとに 3 ポイント、第 2 選択のランキングごとに 2 ポイント、第 3 選択のランキングごとに 1 ポイントを獲得します。(4 位にランクされてもポイントは与えられません。) たとえば、上記のランク投票では、リベラル カウントに 3 ポイント、グリーン カウントに 2 ポイント、CPC カウントに 1 ポイントが貢献します。最も多くのポイントを獲得したパーティーが議席を獲得します。

最初の要素が Borda Count に従って勝ったパーティーの名前で、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)
return winner, results

しかし、私が試してみると

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]ます。

これを改善できる解決策や方法はありますか?

4

1 に答える 1

0
PARTY_INDICES = ['NDP_INDEX', 'GREEN_INDEX', 'LIBERAL_INDEX', 'CPC_INDEX']
party_dic = {}

for i, item in enumerate(PARTY_INDICES):
    party_dic[item.split('_')[0]] = i

print party_dic

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 = [v for k, v in sorted(results.items(), key = lambda x: party_dic[x[0]])]
    return winner, results


print voting_borda(['GREEN','NDP', 'LIBERAL', 'CPC'],['GREEN','CPC','LIBERAL','NDP'],['LIBERAL','NDP', 'CPC', 'GREEN'])


{'NDP': 0, 'CPC': 3, 'GREEN': 1, 'LIBERAL': 2}
('GREEN', [4, 6, 5, 3])
于 2012-11-30T05:42:16.930 に答える