<pre><code>def fun(requests):
freq={}
for i in requests:
if i in freq:
freq[i]+=1
print("hit",i)
else:
freq[i]=1
print("miss",i)
if len(freq)>8:
to_remove = min(freq,key=lambda k:(freq[k],k))
print("to remove",to_remove,"from",freq)
del freq[to_remove]
return freq
</code></pre>
<p>这与Chris的类似,但没有将东西转换为字符串,另一件事是使用<code>min</code>的键函数获取要删除它的元素,我们使用元组是可排序的,并且它们的顺序由它们的值位置基给出,因此如果它们具有相同的值,则使用对(值,键)作为比较键(或本例中的频率)在第一个位置,检查其第二个位置,即我们的字典键(或给定的请求)</p>
<pre><code>>>> requests=[1, 13, 15, 1, 3, 4, 2, 12, 10, 4, 1, 15, 15, 11, 14, 7, 10, 9, 14, 5]
>>> result=fun(requests)
miss 1
miss 13
miss 15
hit 1
miss 3
miss 4
miss 2
miss 12
miss 10
hit 4
hit 1
hit 15
hit 15
miss 11
to remove 2 from {1: 3, 13: 1, 15: 3, 3: 1, 4: 2, 2: 1, 12: 1, 10: 1, 11: 1}
miss 14
to remove 3 from {1: 3, 13: 1, 15: 3, 3: 1, 4: 2, 12: 1, 10: 1, 11: 1, 14: 1}
miss 7
to remove 7 from {1: 3, 13: 1, 15: 3, 4: 2, 12: 1, 10: 1, 11: 1, 14: 1, 7: 1}
hit 10
miss 9
to remove 9 from {1: 3, 13: 1, 15: 3, 4: 2, 12: 1, 10: 2, 11: 1, 14: 1, 9: 1}
hit 14
miss 5
to remove 5 from {1: 3, 13: 1, 15: 3, 4: 2, 12: 1, 10: 2, 11: 1, 14: 2, 5: 1}
>>> result
{1: 3, 13: 1, 15: 3, 4: 2, 12: 1, 10: 2, 11: 1, 14: 2}
>>> list(result)
[1, 13, 15, 4, 12, 10, 11, 14]
>>>
</code></pre>
<p>(还请注意,字典对其键进行迭代是默认的,因此实际上不需要调用.keys)</p>