首页 > 解决方案 > 将对象列表更新为由 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)
        )

标签: pythonpython-3.x

解决方案


如果我理解正确,您希望按位&对列表中的所有项目按位 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用作变量名,因为它会影响内置函数。


推荐阅读