2013-07-02 28 views
1

我試圖從基於值的字典中獲得前20個條目。我使用orderedDict按值排序條目。但是,當我試圖從orderedDict中刪除一個條目(爲了保持orderedDict的恆定長度,即20),它不會發生。如何從python中的orderedDict中刪除條目

我寫了下面的代碼:

while linecount>0: 
    line=images.readline().split() 
    #compute "score" for each line 
    if (len(result)<20): 
     result.update({(str(line)):score}) 
    else: 
      if(len(result)==20): 
        result=OrderedDict(sorted(result.items(), key=lambda t: t[1])) 
        if(result.items()[0][1]<score): 
         del result.items()[0] 
         temp=str(line) 
         result.update({temp:score}) 

但刪除/移除未在步驟發生:

del result.items()[0] 

和結果的長度保持21一旦進入到(21 )值

我做錯了什麼,我怎麼辦呢?

回答

5

您正在從.items()返回的列表中刪除一個項目。你需要從字典,而不是刪除:

result.popitem(last=False) 

OrderedDict.popitem()返回第一個或最後一個鍵值,刪除它之後。將last設置爲False您想要刪除第一個的信號。

請注意,您可以測試對只是的第一個值:

if result.values()[0] < score: 

我還只是使用密鑰分配,而不是.update()只是一個元素:

result[str(line)] = score # instead of temp=str(line); result.update({temp:score})