【问题标题】:Convert string to nested structures like list将字符串转换为嵌套结构,如列表
【发布时间】:2015-06-07 02:50:57
【问题描述】:

我有一个类似

的字符串
str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]"

我目前正在使用:

exec("str2list_sample = "+ str_sample)

有没有更清洁的方法来做到这一点?

【问题讨论】:

    标签: python string list


    【解决方案1】:

    首先不要将变量命名为str,因为它会影响内置变量。

    要解决您的问题,您可以使用ast.literal_eval

    >>> a = "[[1, 2], [2.0, 0.3], ['a', 'b']]"
    >>> import ast
    >>> ast.literal_eval(a)
    [[1, 2], [2.0, 0.3], ['a', 'b']]
    

    解决您的最新编辑问题

    >>> str_sample = "[[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]"
    >>> ast.literal_eval(str_sample)
    [[1, 2], [2.0, 0.3], ['a', 'b', [None, (1, 3)], {'c': 'd'}]]
    

    【讨论】:

    • @Gurupad 我想你现在可以停止向列表中添加更多元素了;)
    • 想要一些基本的元素。
    【解决方案2】:

    使用eval,但这不是good practice

    eval("[[1, 2], [2.0, 0.3], ['a', 'b']]")
    [[1, 2], [2.0, 0.3], ['a', 'b']]
    

    【讨论】:

    • 我需要加载数百万个列表。为什么这不是一个好习惯?
    • 使用 eval 是,Bhargav 给出的答案非常好,literal_eval 如果它不是有效的数据类型,则会引发异常,但eval 将评估所有 python 表达式,所以你需要确定你给 eval 的输入没有危险。
    • @NamitSingal 在您未来的所有答案中,请添加指向this 的链接,以解释为什么eval 不好。
    • 现在应该可以了。 @BhargavRao 也感谢您的回答,今天了解了literal_eval ^^
    猜你喜欢
    • 2019-12-27
    • 2016-02-08
    • 2019-04-24
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多