python: мягкая версия iterator.groupby, которая пропускает записи об исключениях - PullRequest
0 голосов
/ 11 мая 2011

Я использую iterator.groupby для группировки похожих записей в итераторе на основе значения атрибута, такого как:

 employment = dict(itertools.groupby(xtable_iterator), operator.attrgetter('key_to_ytable')))  

key_to_ytable - это атрибут, который может вызвать исключение.Итак, весь мой конструктор dict терпит неудачу.Я хотел бы просто пропустить записи, для которых доступ к атрибуту key_to_ytable вызывает исключение, и обработать оставшиеся записи с помощью groupby.

Какие у меня есть альтернативы?
1. Наследовать от групповых и переопределенных функций ИЛИ написать свою собственную групповую
2. Использовать собственный attrgetter, который возвращает None при исключении, а затем отфильтровать Nones
3. Любое другое решение?

Некоторые предыстории: у меня есть библиотека, которая инкапсулирует таблицу базы данных в качестве итератора объекта записи.Атрибутами этого объекта записи являются столбцы.В случае внешнего ключа библиотека ищет соответствующую таблицу и выбирает значение в качестве значения атрибута.К сожалению, таблицы не гарантированно синхронизируются.Таким образом, внешний ключ может ссылаться на несуществующую запись, и в этом случае библиотека выдает исключение.

1 Ответ

1 голос
/ 11 мая 2011

Я голосую за пользовательский атрибут в этой ситуации, например:

employment = dict(itertools.groupby(xtable_iterator),
                  lambda x: getattr(x, 'key_to_ytable', None))
employment.pop(None)

Это проще и, вероятно, быстрее, чем делать фильтр или что-то еще, вы знаете, что там будет только один None.

...