python - 将对象列表更新为由 Python3 中的列表项组成的新对象
问题描述
我已将值的字典转换为 DynamoDB 条件等于对象的列表:
list = []
for key, value in values.items():
list.append(Key(key).eq(value))
print(list)
我有一个列表,它看起来像这样(它可以超过 2 项)
[<boto3.dynamodb.conditions.Equals object at 0x7fbe73a98d30>, <boto3.dynamodb.conditions.Equals object at 0x7fbe73a98df0>]
我怎样才能将其转换为
<boto3.dynamodb.conditions.Equals object at 0x7fbe73a98d30> & <boto3.dynamodb.conditions.Equals object at 0x7fbe73a98df0>
所以我想替换','
为'&'
并且我想保持boto3 dynamodb条件的类型等于对象
在那之后我就可以在这里
response = self.table.query(
IndexName=index,
KeyConditionExpression=TheNewObject
)
这是一个工作示例:
response = self.table.query(
IndexName='Tracked-Index',
KeyConditionExpression=Key('type').eq(sort) & Key('tracked').eq(tracked)
)
解决方案
如果我理解正确,您希望按位&
对列表中的所有项目按位 AND ( )。您可以将operator.and_
其用作按位与的函数,并functools.reduce
应用该函数。
L = [Key(key).eq(value) for key, value in values.items()] # Comp instead of loop
from functools import reduce
from operator import and_
TheNewObject = reduce(and_, L)
对于一个非常简单的例子:
>>> reduce(and_, [3, 5, 9])
1
顺便说一句,不要list
用作变量名,因为它会影响内置函数。
推荐阅读
- reactjs - 如何正确请求组件的道具
- javascript - 在特定时间播放混音器动画( playAt() 或 skipTo() )
- python-3.x - 迭代数据框中的行创建一个新列,然后根据新列添加更多列
- python - 使用 Flask 将多个变量传递到下一个 HTML 页面(特别是“Value”和“Selected”,而不仅仅是“Selected”)
- amazon-web-services - 在页面构建时将资产从 CDN 导入 Gatsby
- python - 如何在 python 列表理解中翻译嵌套的 if-else
- html - Django如何在forloop中的模板中使用数组
- excel - Excel - 需要提取在单元格中包含数字的机器ID,无论其在句子中的位置如何
- sqlite - 如何优化 firebase/firestore 以获得大型在线数据库的合理同步工具?
- arrays - 使用 find 过滤带有两个参数的数组