为了账号安全,请及时绑定邮箱和手机立即绑定

处理来自 DynamoDB 的响应 - Python

处理来自 DynamoDB 的响应 - Python

慕桂英4014372 2022-10-11 21:22:05
我从 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' 可能不同。比如布尔字符串、列表等。有没有一种简单的方法来获取键值对。
查看完整描述

3 回答

?
繁星淼淼

TA贡献1775条经验 获得超11个赞

如果您不想引入外部依赖项,可以使用此处Table描述的类。

import boto3


dynamodb = 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。


查看完整回答
反对 回复 2022-10-11
?
holdtom

TA贡献1805条经验 获得超10个赞

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)


查看完整回答
反对 回复 2022-10-11
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

像这样的东西可以工作,你不需要关心内部密钥(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'}


查看完整回答
反对 回复 2022-10-11
  • 3 回答
  • 0 关注
  • 190 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号