我正在寫一個功能來選擇一個基於大多數系統的贏家。如果沒有多數票,那麼我需要用最少的選票取消選擇,繼續前進,直到獲得大多數選票爲止。例如,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