2011-02-02 107 views
1

我在這個問題上工作了兩天,我的想法是從這個模型:如何從數據存儲模型創建嵌套字典?


class oceni(db.Model): 
    user = db.UserProperty() 
    weight = db.FloatProperty() 
    item = db.StringProperty() 

..to創建字典的格式如下:


collection = dict() 
collection = { 
    'user1':{'item1':weight1,'item2':weight2..}, 
    'user2':{'item3':weight3,'item4':weight4..}, 
..} 

..和遠我達到的是這樣的:

 

kontenier = db.GqlQuery('SELECT * FROM oceni') 

     kolekcija = dict() 
     tmp = dict() 
     lista = [] 
     for it in kontenier: 
      lista.append(it.user) 
     set = [] 
     for e in lista: 
      if e not in set: 
       set.append(e) 
     for i in set: 
      kontenier = db.GqlQuery('SELECT * FROM oceni WHERE user=:1',i) 
      for it in kontenier: 
       tmp[it.item]=it.weight 
      kolekcija[i]=tmp 


 

..但是這創建了一個字典,其中所有的用戶都有相同的字典與項目和它們的權重。我知道這不是最pythonic的方式,但我是新來的,所以我會渴望學習更多關於這個問題的東西。

+1

這是一個好主意,不要使用變量名稱的類型名稱(即使在你自己的語言)。最好使用屬於問題/解決方案域的名稱。 – Apalala 2011-02-03 05:57:43

+0

@Apalala這寫的是屬於我的問題域的名稱,但我重命名了其中的一些,所以代碼將更容易理解你.. – Kex 2011-02-03 11:21:14

回答

3

我在這段代碼中使用了你的變量名稱。

kontenier = db.GqlQuery('SELECT * FROM oceni') 
kolekcija = {} 
for it in kontenier: 
    if it.user not in kolekcija: 
     kolekcija[it.user] = {} 
    kolekcija[it.user][it.item] = it.weight