我试图从价值的字典中获得前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})
Run Code Online (Sandbox Code Playgroud)
但删除/删除不会发生在步骤:
del result.items()[0]
Run Code Online (Sandbox Code Playgroud)
并且一旦达到该值(21),结果的长度保持为21
我做错了什么,我怎么办呢?
您正在从返回的列表中删除项目.items().您需要从字典中删除:
result.popitem(last=False)
Run Code Online (Sandbox Code Playgroud)
OrderedDict.popitem()删除后返回第一个或最后一个键值.设置last为False要删除第一个信号.
请注意,您可以测试对刚刚的第一个值:
if result.values()[0] < score:
Run Code Online (Sandbox Code Playgroud)
我也只使用键赋值而不.update()只是一个元素:
result[str(line)] = score # instead of temp=str(line); result.update({temp:score})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9182 次 |
| 最近记录: |