我正在创建一个简单的字典比较来搜索和匹配项目。以这种基本形式,它可以按预期工作。
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',然后运行比较吗?会是什么样?
效率也很重要,此功能将大量使用。
答案 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}]