【问题标题】:Need help to convert string to dictionary in python需要帮助在python中将字符串转换为字典
【发布时间】:2021-09-17 22:11:59
【问题描述】:

我正在 AWS 中创建一个 lambda 函数来执行 SSM 自动化文档。

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ssm.html#SSM.Client.start_automation_execution.

response = client.start_automation_execution(
DocumentName='XYZ',
Parameters={...}    

)

我已将 DocumentName 和 Parameters 值存储在 dynamodb 表中,如下所示。

"parameters_name": { "S": "'ParameterName1': [Variable1] , 'ParameterName2': [Variable2] , 'ParameterName3': [variable3] , 'ParameterName4': [Variable4] " }, "document_name": { "S": "XYZ" }

** 变量值是以字符串形式从事件中获取的。

参数的定义在boto3文档中如下:

Parameters (dict) -- A key-value map of execution parameters, which match the declared parameters in the Automation runbook. (string) -- (list) -- (string) --

有没有办法将字符串转换为以下格式:

{'ParameterName1': [Variable1] , 'ParameterName2': [Variable2] , 'ParameterName3' : [Variable3], 'ParameterName4' : [Variable4]}

【问题讨论】:

    标签: python-3.x boto3


    【解决方案1】:

    Python 有一个名为 eval 的内置函数:

    # need to append and prepend curly braces to the string first
    my_str = "{'ParameterName1': [Variable1], 'ParameterName2': [Variable2], 'ParameterName3': [Variable3], 'ParameterName4': [Variable4]}"
    my_dict = eval(my_str)
    
    print(str(my_dict))
    

    您也可以使用ast 库,它声称比eval 更安全,但这是因为它对字符串的格式实施了更严格的规则。

    import ast
    
    my_str = "{'ParameterName1': [Variable1], 'ParameterName2': [Variable2], 'ParameterName3': [Variable3], 'ParameterName4': [Variable4]}"
    my_dict = ast.literal_eval(my_str)
    
    print(str(my_dict))
    

    【讨论】:

    • 嗨,Daniel,eval 函数对我来说很好用。 ast.literal_eval 因“errorMessage”失败:“格式错误的节点或字符串:<_ast.name object at>”,“errorType”:“ValueError”,
    • 太棒了!是的,主要是通过要求您的字符串采用更具体的格式以便安全地解析它,从而使库函数更加安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多