Python 获得剩余的决选投票
Python get remaining runoff voting
我在为项目编写函数时有点卡壳了。此函数采用候选人字典,其值是他们收到的选票数。然后我必须 return 一个包含 remaining_candidates 的集合。换句话说,得票最少的候选人不应该在 returned 的集合中,并且如果例如所有候选人都拥有相同的选票,则该集合应该是空的。我在这里开始时遇到了麻烦。
例如,我知道我可以像这样对字典进行排序:
x = min(canadites, key=canadites.__getitem__)
但如果候选人具有相同的价值,那将不起作用,因为它只会弹出字典中的最后一个。
有什么想法吗?
更新:把事情说清楚。
假设我有以下字典:
canadites = {'X':22,'Y':1, 'Z':0}
理想情况下,函数应该 return 一个仅包含 X 和 Y 的集合。但是如果 Y 和 Z 都为 1
x = min(canadites, key=canadites.__getitem__)
好像只有returnZ
创建新字典比从旧字典中弹出项目更干净:
>>> d = {'a':1, 'b':2, 'c':1, 'd':3}
>>> min_val = min(d.values())
>>> {k:v for k,v in d.items() if v > min_val}
{'b': 2, 'd': 3}
在 python2 中,itervalues
和 iteritems
会更有效率,尽管这在大多数情况下是微优化。
我在为项目编写函数时有点卡壳了。此函数采用候选人字典,其值是他们收到的选票数。然后我必须 return 一个包含 remaining_candidates 的集合。换句话说,得票最少的候选人不应该在 returned 的集合中,并且如果例如所有候选人都拥有相同的选票,则该集合应该是空的。我在这里开始时遇到了麻烦。 例如,我知道我可以像这样对字典进行排序:
x = min(canadites, key=canadites.__getitem__)
但如果候选人具有相同的价值,那将不起作用,因为它只会弹出字典中的最后一个。
有什么想法吗?
更新:把事情说清楚。
假设我有以下字典:
canadites = {'X':22,'Y':1, 'Z':0}
理想情况下,函数应该 return 一个仅包含 X 和 Y 的集合。但是如果 Y 和 Z 都为 1
x = min(canadites, key=canadites.__getitem__)
好像只有returnZ
创建新字典比从旧字典中弹出项目更干净:
>>> d = {'a':1, 'b':2, 'c':1, 'd':3}
>>> min_val = min(d.values())
>>> {k:v for k,v in d.items() if v > min_val}
{'b': 2, 'd': 3}
在 python2 中,itervalues
和 iteritems
会更有效率,尽管这在大多数情况下是微优化。