将过滤器字典与另一个过滤器字典匹配-Python

时间:2019-02-26 15:50:10

标签: python filter

我有以下配置文件,它是一个具有以下字段的.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 :(得分:1)

您可以反转逻辑,并在同一键(如果存在)下从过滤器的行中搜索值。代码可能是(由于使用了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