2015-09-05 53 views
0

本質上,我想刪除字典中的每個鍵,如果它的值不等於最高值。刪除字典中的值不等於Python中最高值的字典

比方說,這是字典:

myDict = {"Bob": 1, "Bill": 5, "Barry": 4, "Steve": 5} 

我能按值使用此對它進行排序:

myDict = sorted(myDict, key=myDict.get, reverse=True) 

現在我想刪除在沒有按」字典任意鍵t等於最高值(在本例中爲'5')。要這樣結束了:

myDict = {"Bill": 5, "Steve": 5} 

我一直在使用這個for循環的嘗試:

for item, v in myDict: 
    if v < myDict[0]: 
     del myDict[v] 

但我得到這個錯誤:

ValueError: too many values to unpack (expected 2) 

這是)我第一次發佈在這裏,和b)我只學了幾個月的Python,所以我很抱歉如果我犯了一些愚蠢的錯誤。

+0

要獲得最高的價值,你不需要進行排序。 –

回答

0

你不應該改變你正在迭代的對象,這通常會產生意想不到的結果(內部指針會被移位,而你會錯過迭代中的元素等等)。你最好收集要刪除,然後刪除在一個單獨的重複鍵鍵:

keys = [k for k in myDict.keys() if myDict[k] == max(myDict.values())]; 
for k in keys: del myDict[k]; 

這可能是最好把max表達一個變量太多,因此不會得到評估多次。不知道Python是否能夠爲你優化(可能不是)。

1

for item, v in myDict只是給你keysmydict,而你正在收集在item, v是關鍵,這就是爲什麼,

使用myDict.items()myDict.iteritems()

for item, v in myDict.iteritems(): 
    if v < myDict[0]: 
     del myDict[v] 

Dict獲得myDict

max(myDict.values())

delete鍵的最高值永遠不會改變你迭代的迭代器,它會給你RuntimeError。因此,將其複製到另一個變量中,並將其更改爲Anand S Kumar

0

您可以使用字典解析來創建一個新的字典:

newDict = {k: v for k,v in myDict.items() if v == max(myDict.values())} 

輸出爲newDict

{'Steve': 5, 'Bill': 5}