2017-07-19 103 views
0

我正在使用缓存工具库中的LRUCache,但是当我试图追加我得到的错误'字典'对象没有属性'追加' 虽然我明白什么是错误,我不能似乎想出任何方法来解决它,有人可以帮忙吗? 这里是一个小小的代码。缓存工具的LRU缓存问题

GivenQuestionsCache=LRUCache(maxsize=100,missing=getGivenQuestions) 
now GivenQuestionsCache[1] gives 
{1: [[211736, None], [211736, 'a'], [207113, 'a'], [219556, None], [207095, None], [89027, None], [89027, None]]} 

,我试图做

GivenQuestionsCache[1].append([10,None]) 

则抛出错误。有没有其他方法可以实现这一目标? 我想我的缓存成为

{1: [[211736, None], [211736, 'a'], [207113, 'a'], [219556, None], [207095, None], [89027, None], [89027, None],[10,None]]} 
+0

“getGivenQuestions”是否返回字典?如果是 - 那么GivenQuestionsCache将使用缺少的工厂而不是此列表。 –

+0

是的,它确实返回字典。对不起,什么缺少工厂? – xmen

+0

“失踪”的属性是当你有一个使用工厂缓存未命中 GivenQuestionsCache [a_key_does_not_exists] == getGivenQuestions() 现在,你需要找出为什么它没有在缓存中的“1” –

回答

1

我测试你的代码,它的工作原理:

from cachetools import LRUCache 
GivenQuestionsCache=LRUCache(maxsize=100,missing=lambda _: dict()) 
GivenQuestionsCache[1] = [[211736, None], [211736, 'a'], [207113, 'a'], [219556, None], [207095, None], [89027, None], [89027, None]] 
GivenQuestionsCache[1].append([10,None]) 
print GivenQuestionsCache[1] 

回报

[[211736, None], 
[211736, 'a'], 
[207113, 'a'], 
[219556, None], 
[207095, None], 
[89027, None], 
[89027, None], 
[10, None]] 

GivenQuestionsCache[2].append([10,None])

将返回

AttributeError: 'dict' object has no attribute 'append' 

所以你需要检查所有的代码,可能可以修改GivenQuestionsCache。

+0

它不适用于我,您可以检查它是否适用于python3 + – xmen

+0

print(GivenQuestionsCache .__ contains __(studentId)) GivenQuestionsCache。 __getitem __(studentId).append([int(questionId),None]) 我这样做,第一行打印真实,但我仍然收到错误,没有其他人修改缓存 – xmen

+0

hmm,在Python 3.4.3和python 2.7.6中测试 - 没有问题 –