Как я использую __ getitem __ и __ проход __ и возвращаю значения из словаря?

Я предполагаю, что Вы пытаетесь сделать интерфейс команды максимально прощающим. Если это верно, я предлагаю, чтобы Вы использовали алгоритм, подобный этому:

  1. Read в строке
    • Разделение строка в маркеры
    • Использование словарь для преобразования синонимов в стандартную форму
    • , Например, преобразуйте "хит", "перфорацию", "забастовку", и "ударьте", все для "совершения нападки"
    • Выполняют действия с незаказанным, включительно базируются
    • Незаказанный - "перфорация, обезьяна в поверхности" является тем же самым как "поверхность в перфорации обезьяны"
    • Содержащий - Если команда, как предполагается, является "перфорацией обезьяна в поверхности", и они предоставляют "обезьяну перфорации", необходимо проверить, какому количеству команд это соответствует. Если только одна команда, сделайте это действие. Это могла бы даже быть хорошая идея иметь приоритеты команды, и даже если бы были даже соответствия, это выполнило бы главное действие.
15
задан thornomad 23 November 2009 в 00:35
поделиться

5 ответов

def __iter__(self): return self.books.itervalues()
24
ответ дан 1 December 2019 в 01:45
поделиться

Добавить этот метод в библиотеку:

def __iter__(self):
  return self.books.itervalues()

Это делегирует итерацию dict, у которого есть простой метод для итерации значений. Прочтите о протоколе итератора, который состоит из методов __ iter __ (для всех итераций) и next ( __ next __ в 3.x) (только для итераторов).

4
ответ дан 1 December 2019 в 01:45
поделиться
>>> class Library(object):
...     def __init__(self):                                                     
...             self.books = { 'title' : object, 'title2' : object, 'title3' : object, }
...     def __getitem__(self, i):
...             return self.books[i]
...     def __iter__(self):
...             return self.books.itervalues()
... 
>>> library = Library()
>>> library['title']
<type 'object'>
>>> for book in library:
...     print book
... 
<type 'object'>
<type 'object'>
<type 'object'>
2
ответ дан 1 December 2019 в 01:45
поделиться

Вы можете вернуть итератор из ваших внутренних данных:

class Library (object):
  ...
  def __iter__(self):
    return self.books.itervalues()

itervalues ​​() возвращает итератор к значениям словаря.

Если вам нужен больший контроль, вы можете сделать __ iter __ функцией генератора

class Library (object):
  ...
  def __iter__(self):
    for title in self.books:
      yield self.books[title]

в этом случае этот генератор дает то же самое, что и итератор в первом примере.

3
ответ дан 1 December 2019 в 01:45
поделиться

Рассматривали ли вы использование миксина UserDict ?

0
ответ дан 1 December 2019 в 01:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: