gpt4 book ai didi

python - 将列表中的 OR 条件表达式连接到 "|"

转载 作者:行者123 更新时间:2023-12-01 03:42:11 24 4
gpt4 key购买 nike

这可能是一个与 python lang 相关的问题,而不是 boto3 lib 的问题:

该查询有效:

matches = table.query(
IndexName="status-date-index",
KeyConditionExpression=Key('status').eq('next'),
FilterExpression=Attr('teams').contains('a') | Attr('teams').contains('b') | Attr('teams').contains('c')
)

但是我将有一个变量列表["a", "b", "c", ...N]并且需要将它们转换为

filter_expression = Attr('teams').contains('a') | Attr('teams').contains('b') | Attr('teams').contains('c') | ...N

有什么想法可以用 python 来做吗?或者也许我需要为这种情况做一个更好的 FilterExpression ?

boto3.dynamodb.conditions.Attr reference.

最佳答案

您可以使用functools.reducecontains 生成的项目列表中(我假设其类型为 ConditionBase),其中 or_ operator 。您还可以将其与 functools.map 结合起来因为你有一堆类似的输入。考虑这个简单得多的例子:

>>> from functools import map
>>> from functools import reduce
>>> from operator import or_
>>> values = ['9', '3', '7', '32']
>>> map(int, values)
[9, 3, 7, 32]
>>> reduce(or_, map(int, values))
47

完全等同于

>>> 9 | 3 | 7 | 32
47

为了进一步简化从 Attr(field).contains(value) 生成 Condition 对象,可以构造一个 2 元组列表,如下所示(基于关于你原来的问题)通过列表理解:

raw_conditions = [
('teams', 'a'),
('b', 'cali'),
('teams', 'c'),
]

conditions = [Attr(field).contains(value) for field, value in raw_conditions]
filter_expression = reduce(or_, conditions)

关于python - 将列表中的 OR 条件表达式连接到 "|",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39421967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com