我正在写一个功能来选择一个基于大多数系统的赢家。如果没有多数票,那么我需要用最少的选票取消选择,继续前进,直到获得大多数选票为止。例如,Python - 迭代字典并更改字典 - 如何?
voting({'a':12, 'b':9, 'd':4})
在这种情况下,具有'a'
12票,'b'
具有9和'd'
具有4.自'a'
不具有大部分(12/25票),我需要从可用除去'd'
选择,它会占多数(12/21)。每个“投票”中可能有多种选择,重要的是每个选项中的第一个选项。
我的代码是def voting(votes)
:
d = {}
winning_party = ''
i = 0
for key in votes.keys():
d[key] = votes[key]
while winning_party == '':
for key, vote in d.items():
if d[key] > 0.5 * sum(d.values()):
winning_party = key
return winning_party
else:
if d[key] == min(d.values()):
del d[key]
我试着做一些小的变化,但我要么得到该迭代过程中改变大小的词典,或功能停止工作的错误。
任何人都可以帮助我修复代码,或告诉我如何避免在循环中更改字典?我只能真正使用上面的代码,即我不能导入任何东西或使用基本功能以外的任何东西。
如果'('a','b','c','d'):12'表示“得到12票”,那么其余的字母就显得多余了。确实在你的代码中,你把它们扔掉了。我可以看到这正在发展成一个“可转移的投票”系统,但就目前而言,你应该从你的问题中删除这样的细节。 –
这并不能完全解决您的问题,但是通过选择票数最多的候选人不能得到相同的结果吗?我不认为迭代字典是必要的吗? –
你说得对,我应该编辑这部分,现在修复! – user52610