2010-02-09 25 views
2

我寫的App Engine應用程序(這是一個簡單的任務系統的遊戲):Python的問題 - 我有一個類的列表,我如何刪除重複?

,所以我有一個列表

class Quest(db.Model): 
    name = db.StringProperty() 
# note: I made about 10 different quest entities (quest1 to quest10) 

class User(db.Model): 
    completed_quests = db.StringListProperty() # to store keys of completed quests 

# note: I made some fake data showing that the user completed 3 quests. 
# user.completed_quests = ["key1","key2","key3"] - keys belong to the corresponding quests 

所以我查詢用戶和他/她已完成的任務。 用戶= User.get_by_key_name(用戶ID)

然後我查詢任務模型 all_quests = Quest.all()

這樣的問題:我怎麼交叉檢查我user.completed_quests與all_quests名單?

我的目標:我要呈現給用戶的網頁,他/她可以看到: - 不完整的任務 - 完成任務和 的列表。

我使用的方法:

# prepare a buffer 
completed_quests = [] 

for quest in all_quests: 
    for k,completed_quest in enumerate(user.completed_quests): 
    if str(completed_quest) == str(quest.key()): # the point of detection 
     completed_quests.append(completed_quest) 

# final product is a list of completed quest entites 

但我怎麼做我未完成的任務?

回答

3

您可以使用difference

all = set(quest.key() for quest in all_quests) 
complete = set(completed_quests) 
incomplete = all.difference(complete) 
0

嘗試是這樣的:

quests = [(x.key(), x) for x in Quest.all.fetch(1000)] 
incomplete_quests = [v for k, v in quests if k not in a_user.completed_quests] 

這假設,爲了簡單起見,你先轉換您的已完成的任務列表中的db.ListProperty(DB 。鍵)。

相關問題