Сопоставить фильтр фильтра с другим - Python - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть следующий файл конфигурации, это .yml со следующими полями.

filter:
    mic :
      - 'XMAD'
      - 'XSTUB'
    cfi :
      - 'CF5334'

Моя проблема заключается в следующем.

Я загружаю строки из файла XML,они имеют следующую структуру.

{'isin': 'CA86882A1093', 'cfi': 'ECNXFR', 'currency': 'EUR', 'mic': 'FRAB', 'date': '2019-02-19'}

С моим полем фильтра конфигурации .yml я хочу принять только те из них, которые следуют моему фильтру, в данном случае это мой фильтр.

{'mic': ['XMAD', 'XSTUB'], 'cfi': ['CF5334']}

Как вы можете видеть, они могут быть списком, в этом случае мой фильтр позволяет загружать только те, которые имеют в микрофоне XMAD или XSTUB, а cfi может иметь только 'CF5334'.

Мой код работает нормально, если онитолько одно значение, но оно не работает, если у меня есть список возможных значений, как вы можете видеть в поле mic.

Вот мой код.

for row in xml_file:
    setf = self.filter.items()
    if setf in (row.items() & setf):
        yield security

Любойидея?

1 Ответ

0 голосов
/ 26 февраля 2019

Вы можете инвертировать логику и искать значения из строки в фильтре под тем же ключом, если он есть.Код может быть (спасибо Python for ... else ...):

for row in xml_file:
    for key, value in row.items():
        if key in filter and row[key] not in filter[key]:
            break
    else:
        yield row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...