Ваш первый вопрос лучше задать на сайте codereview .
Что касается вашего второго вопроса, вы можете использовать генератор следующим образом:
def constructor(self, book, book_key):
for k, v in book.iteritems():
if k==book_Key:
yield v
...
for value in obj.constructor(book ,book_key):
# Do whatever you need with value
Во всяком случае, я понимаю, что вы получите только один результат от понимания списка, в таком случае:
def constructor(self, book, book_key):
return next(v for k, v in book.iteritems() if k==book_key, None)
...
value = obj.constructor(book ,book_key)
if value is not None:
# Do whatever you need with value
Где next
- это встроенная функция, которая возвращает следующее значение итератора или значение по умолчанию, переданное (None
в этом случае), если итератор исчерпан (если значение по умолчанию не установлено прошло, исключение будет возбуждено в этом случае).