我正在尝试根据值从字典中获取前 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
我做错了什么,我还能怎么做?
请您参考如下方法:
您正在从 .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})
