2017-07-25 3 views
0

私はcachetoolsのLRUCacheを使用してdictの形式でデータを保存していますが、不足している工場の概念の動作を理解するのに苦労しています。今PythonのLRUcacheの動作

GivenQuestionsCache=LRUCache(maxsize=100,missing=getGivenQuestions) 
def getGivenQuestions(studentId): 
    cur=db.cursor() 
    cur.execute(*query*) 
    questions={} 
    for each in cur.fetchall(): 
     if(int(each[1]) in questions): 
      questions[int(each[1])].append([each[3],each[4]]) 
     else: 
      questions[int(each[1])]=[[each[3],each[4]]] 
    return questions 

、私は

print(GivenQuestionsCache[studentId]) 

を行うとき、私は

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

のようなものを期待していますが、それは

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

は、なぜそれがまた値と一緒に鍵を印刷している印刷します? はまた、このために、私はどうやらそれが問題を引き起こした、ネストされたdictsの辞書の辞書だったこの

GivenQuestionsCache[studentId].append([int(questionId),None]) 
+0

'getGivenQuestions'が戻っているを使用して、これを解きます'dict'なので、' LRUCache'には辞書が入っているのです。 '1 'は' int(each [1]) 'の値です。 – EsotericVoid

+0

GivenQuestionsCache [1] .append([int(questionId)、None])が正しく動作するはずです。 しかし、それはエラーをスローします - '' dict 'オブジェクトには属性' append ''がありません – Bhargav

+0

あなたの実装では、 'GivenQuestionsCache'は' dict'の 'dict'です(' LRUCache'は 'dict 'キーが' studentId'であり、欠けているキーを埋めるために提供するメソッドは 'each [1]'からキーが形成される 'dict'を返します。あなたの最初のdictへのアクセスのみ。あなたがあなたの質問の意味を分かち合うなら、より良いデータ構造についてより詳細な助言を与えることができます。 – EsotericVoid

答えて

1

のような追加を使用することができません、私はGivenQuestionsCache[studentId][studentId].append([int(questi‌​onId),None])

関連する問題