将元组作为值的字典比较

时间:2019-06-06 07:52:14

标签: python dictionary tuples python-3.6

我正在创建一个简单的字典比较来搜索和匹配项目。以这种基本形式,它可以按预期工作。

def findOrders(lst, **kwargs):
    return [k for k in lst if kwargs.items() <= k.items()]

lst = [i for i in [ {'type':'esimene', 'id':1},
                    {'type':'teine', 'id':2},
                    {'type':'kolmas', 'id':3}]]

print(findOrders(lst, type='esimene'))

现在,我想使用元组作为关键字/值来按多个“类型”进行比较/匹配:

findOrders(lst, type=('esimene', 'teine'))

什么是最好的方法?

我可以创建一个生成器,将元组展平为'type':'esimene'和'type':'teine',然后运行比较吗?会是什么样?

效率也很重要,此功能将大量使用。

1 个答案:

答案 0 :(得分:2)

您可以检查type参数是否包含每个项目的type属性:

In [8]: def findOrders(lst, **kwargs):
   ...:     return [k for k in lst if k["type"] in kwargs["type"]]

In [9]: print(findOrders(lst, type='esimene'))
[{'type': 'esimene', 'id': 1}]

In [10]: print(findOrders(lst, type=('esimene',  'teine')))
[{'type': 'esimene', 'id': 1}, {'type': 'teine', 'id': 2}]

如果您也想通过id比较来保持当前逻辑:

In [32]: def findOrders(lst, **kwargs):
    ...:     return [k for k in lst if k["type"] in kwargs.get("type", (k["type"], )) and k["id"] ==
    ...: kwargs.get("id", k["id"])]
    ...:
    ...:
    ...:

In [33]: print(findOrders(lst, id=1))
[{'type': 'esimene', 'id': 1}]

In [34]: print(findOrders(lst, type=('esimene',  'teine')))
[{'type': 'esimene', 'id': 1}, {'type': 'teine', 'id': 2}]

In [35]: print(findOrders(lst, type=('esimene', 'teine'), id=2))
[{'type': 'teine', 'id': 2}]