python - 使用 python 进行 Borda 计数?

标签 python voting-system

我有一个选票列表,看起来像 A>B>C>D>E,其中一些选票看起来像 A>B>C=D=E。选票位于文本文件中,每张选票各占一行。我想为每个候选人分配分值。对于 A>B>C>D>E,A 应获得第 4 分,B 应获得 3 分,C 2,D 1,E 0。对于 A>B>C=D=E,A 应获得4 分,B 应该得到 3 分,因为 C、D 和 E 是平局,所以他们应该平分剩下的 3 分,这样他们就各得 1 分。我希望计算文本文件中的所有选票并将选票相加。您认为最简单的方法是什么?

最佳答案

import itertools
import collections

def borda(ballot):
    n = len([c for c in ballot if c.isalpha()]) - 1
    score = itertools.count(n, step = -1)
    result = {}
    for group in [item.split('=') for item in ballot.split('>')]:
        s = sum(next(score) for item in group)/float(len(group))
        for pref in group:
            result[pref] = s
    return result

def tally(ballots):
    result = collections.defaultdict(int)
    for ballot in ballots:
        for pref,score in borda(ballot).iteritems():
            result[pref]+=score
    result = dict(result)
    return result

ballots = ['A>B>C>D>E',
           'A>B>C=D=E',
           'A>B=C>D>E', 
           ]

print(tally(ballots))

产量

{'A': 12.0, 'C': 5.5, 'B': 8.5, 'E': 1.0, 'D': 3.0}

关于python - 使用 python 进行 Borda 计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9242450/

相关文章:

python - 使用 python 将压缩的 SQL 转储导入 Postgresql

python - Django 每月注释价格

php - 如何确保用户每个帖子只能投票一次

blockchain - 如何在没有元掩码的情况下创建 DAPP

php - 如何防止玩弄人们每天可以投票一次的投票系统?

python - String Join 将 True 视为 bool 值而不是字符串

python - 如何将 "keras"从 1.2.0 升级到 2.0.0?

java - 我的投票系统已经很好但是

node.js - 使用 MongoDB 的可扩展投票系统

python - 随机发生器不工作