处理来自 DynamoDB 的响应 - Python

我从 DynamoDB 接收以下数据作为对客户端扫描 API 调用的响应。


Data = [{'id': {'S': '5'},

         'FirstName': {'S': 'Prashanth'},

         'LastName': {'S': 'Wadeyar'},

         'ClientName': {'S': 'Test'}}]

我想处理这个响应并将输出作为


{'FirstName':'Prashanth', 'LastName': 'Wadeyar', 'ClientName': 'Test'}

我可以通过像这样分开来处理它


for field_obj in data:

    obj = (field_obj['FirstName'])

但要获得 Firstname 的值,每个对象的 Key 'S' 可能不同。比如布尔字符串、列表等。


有没有一种简单的方法来获取键值对。


慕桂英4014372
浏览 191回答 3
3回答

繁星淼淼

如果您不想引入外部依赖项,可以使用此处Table描述的类。import boto3dynamodb = boto3.resource('dynamodb')table = dynamodb.Table('users')response = table.get_item(    Key={        'username': 'janedoe',        'last_name': 'Doe'    })item = response['Item']print(item)预期输出:{u'username': u'janedoe', u'first_name': u'Jane', u'last_name': u'Doe', u'account_type': u'standard_user', u'age': Decimal('25')}但我个人每次听到有关 Python 和 DynamoDB 的偏好是使用 PynamoDB:https ://pynamodb.readthedocs.io/en/latest/这是 DynamoDB 的一种 ORM。

holdtom

Mayank 的上述回答似乎效果很好,但我也想映射我想在列表中返回的字段。因此我映射了字段,然后能够得到我正在寻找的结果FIELD_MAP = ['firstName', 'lastName',               'clientName']    for field_obj in response['Items']:        for key in FIELD_MAP:            if field_obj.get(key):                obj = (field_obj.get(key))                for i in obj:                    value = obj[i]                db_result.append({key: value})    print(db_result)

尚方宝剑之说

像这样的东西可以工作,你不需要关心内部密钥(S在你的情况下):In [1018]: d = {}In [1016]: for i in Data:       ...:     for k,v in i.items():      ...:         if k != 'id':      ...:             if isinstance(v, dict):       ...:                 for j, val in v.items():       ...:                     d[k] = val       ...:                  In [1024]: d                                                                                                                                                                                                Out[1024]: {'FirstName': 'Prashanth', 'LastName': 'Wadeyar', 'ClientName': 'Test'}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python