将一个筛选器dict与另一个筛选器dict匹配-Python

将一个筛选器dict与另一个筛选器dict匹配-Python,python,filter,Python,Filter,我有下面的配置文件,它是一个带有以下字段的.yml filter: mic : - 'XMAD' - 'XSTUB' cfi : - 'CF5334' 我的问题如下 我正在从XML文件加载行,它们具有以下结构 {'isin': 'CA86882A1093', 'cfi': 'ECNXFR', 'currency': 'EUR', 'mic': 'FRAB', 'date': '2019-02-19'} 在my.yml配置过滤器字段中,我只希

我有下面的配置文件,它是一个带有以下字段的.yml

filter:
    mic :
      - 'XMAD'
      - 'XSTUB'
    cfi :
      - 'CF5334'
我的问题如下

我正在从XML文件加载行,它们具有以下结构

{'isin': 'CA86882A1093', 'cfi': 'ECNXFR', 'currency': 'EUR', 'mic': 'FRAB', 'date': '2019-02-19'}
在my.yml配置过滤器字段中,我只希望接受过滤器后面的所有过滤器,在本例中,这是我的过滤器

{'mic': ['XMAD', 'XSTUB'], 'cfi': ['CF5334']}
正如您所看到的,它们可以是列表,在这种情况下,我的过滤器只允许上传那些在mic XMAD或XSTUB中的,并且cfi只能是“CF5334”

如果它们只是一个值,我的代码就可以正常工作,但是如果我有一个可能的值列表,就像你在麦克风字段中看到的那样,它就不起作用了

这是我的密码

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

有什么想法吗?

您可以反转逻辑并在同一个键下搜索过滤器中的行中的值(如果存在)。代码可能要感谢Python,因为。。。否则…:

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