1

我正在尝试根据值从字典中获取前 20 个条目。我使用orderedDict 按值对条目进行排序。但是当我试图从orderedDict 中删除一个条目时(以保持orderedDict 的恒定长度,即20)它不会发生。

我写了以下代码:

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

我做错了什么,我还能怎么做?

4

1 回答 1

14

您正在从返回的列表中删除一个项目.items()。您需要从字典中删除:

result.popitem(last=False)

OrderedDict.popitem()删除后返回第一个或最后一个键值。设置lastFalse您想要删除第一个的信号。

请注意,您可以针对第一个值进行测试:

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

我也只使用键分配而不是.update()仅用于一个元素:

result[str(line)] = score  # instead of temp=str(line); result.update({temp:score})
于 2013-07-02T09:49:11.833 回答