如果它們與整個字典中的最小值相同,我正在嘗試檢查并選擇字典中的值。
如您所見,我的代碼選擇了重復值,盡管它們不是最小值。我該如何糾正這個錯誤?例如,除非有多個“7.14”,否則我的代碼不應洗掉值(包括重復項)
def tieBreaker (preDictionary):
while True:
minValues = min(preDictionary.values())
minKeys = [k for k in preDictionary if preDictionary[k] == minValues]
print(minKeys)
for i in range(0, len(minKeys)):
for j in range(0, len(minKeys)):
if minKeys[i] > minKeys[j]:
del preDictionary[minKeys[i]]
i = 1
j = 1
if len(minKeys) < 2:
return preDictionary
break
當前輸出為 {'candidate1': '35.71', 'candidate2': '28.57', 'candidate4': '14.29', 'candidate3': '7.14'}
雖然輸入是 {'candidate1': '35.71', 'candidate2': '28.57', 'candidate5': '14.29', 'candidate4': '14.29', 'candidate3': '7.14'}
不應洗掉候選 5,因為它是重復值,而不是最小值。
此外,minKeys 目前是 ['candidate5', 'candidate4'] 應該是 ['candidate3']
uj5u.com熱心網友回復:
您不需要while回圈。您可以遍歷每個鍵值對并構造一個dict沒有最小值鍵的新鍵。
d = {'candidate1': 35.71, 'candidate2': 28.57, 'candidate4': 14.29, 'candidate3': 7.14}
min_value = min(d.values())
d_without_min_value = {k: v for k, v in d.items() if v != min_value}
# output
# {'candidate1': 35.71, 'candidate2': 28.57, 'candidate4': 14.29}
編輯
似乎您將值作為字串而不是float. 呼叫of將導致字典順序min()中的最小值。在處理 dict 之前洗掉值周圍的引號或將值轉換為liststrfloat
d = {k: float(v) for k, v in d.items()}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/447802.html
