2010-02-09 5 views
2

Пишет приложение App Engine (это простая система квестов для игры):Python question - У меня есть список классов, как удалить дубликаты?

поэтому у меня есть список

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 (идентификатор пользователя)

я построения запросов к модели квестов 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 (дБ .key).

Смежные вопросы