我试图根据值从字典中获取前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我做错了什么,我怎么能这样做?
答案 0 :(得分:7)
您要从.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})