Python вопрос - у меня есть список классов, как мне удалить дубликаты? - PullRequest
2 голосов
/ 09 февраля 2010

Я пишу приложение App Engine (это простая система квестов для игры):

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

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 = User.get_by_key_name (userid)

тогда я запрашиваю модель квестов 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

но как мне сделать это для моих незавершенных квестов?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Вы можете использовать difference:

all = set(quest.key() for quest in all_quests)
complete = set(completed_quests)
incomplete = all.difference(complete)
0 голосов
/ 09 февраля 2010

Попробуйте что-то вроде этого:

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.Key).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...