Форум сайта python.su
0
Я сортирую некий список карт, мне необходимо распихать данные этих карт по массивам в зависимости от того к какой книге принадлежат эти карты. Каждая такая карта хранит ссылку на свою книгу, поэтому я могу по айдишнику вычислить в какой массив мне нужно запихнуть ту или иную карту. Вот код:
books = {} for item in items: itemData = {} itemData['id'] = item.id itemData['title'] = item.card.title itemData['description'] = item.card.description book_id = str(item.card.book.id) if books[book_id] == None: books[book_id] = {} books[book_id]['title'] = item.card.book.title books[book_id]['description'] = item.card.book.description books[book_id]['cards'] = [] books[book_id]['cards'].append (itemData)
if books[book_id] == None:
Отредактировано in (Дек. 27, 2014 00:02:41)
Офлайн
0
Напишу решение, мне пришлось написать отдельный метод. Если есть что-то элегантнее отпишитесь ниже:
if hasAttr(books, book_id) == False:
#someCode
def hasAttr (obj, attr):
try:
obj[attr]
return True
except AttributeError:
return False
except KeyError:
return False
Офлайн
857
in
выкидывает KeyError
if book_id not in books:
Офлайн
34
Чтобы проверить присутствует ли ключ в словаре:
>>> my_dict = {'a': 1, 'b': 2} >>> 'a' in my_dict True >>> 'c' in my_dict False
>>> print(my_dict.get('a')) 1 >>> print(my_dict.get('c')) None >>> print(my_dict.get('c', 'default value')) default value >>>
if books[book_id] == None
if book_id not in books
if books.get(book_id) is None:
Офлайн