【问题标题】:how to convert string consisted of list to real list [closed]如何将由列表组成的字符串转换为真实列表[关闭]
【发布时间】:2014-12-01 13:18:48
【问题描述】:

现在我有了 unicode 对象

u'[
    [
        [
            ["Hello","w_0","w_0,w_10",1],
            [".","w_1","",0," "],
            ["This","w_2","",0," "],
        ]
        [
            ["\u4f60\u597d","w_10","w_0,w_10",1],
            ["\uff0c","w_11","",0],
            ["\u6211","w_12","",0],
        ],
        "http://www.kekenet.com/menu/201206/187574.shtml",154191
    ]
]'

如何将其转换为列表对象,例如

[
    [
        [
            ["Hello","w_0","w_0,w_10",1],
            [".","w_1","",0," "],
            ["This","w_2","",0," "],
        ],
        [
            ["\u4f60\u597d","w_10","w_0,w_10",1],
            ["\uff0c","w_11","",0],
            ["\u6211","w_12","",0],
        ],
        "http://www.kekenet.com/menu/201206/187574.shtml",154191
    ],
]

【问题讨论】:

    标签: python string list


    【解决方案1】:

    您可以使用 ast.literal_eval 安全地评估包含 Python 文字的字符串。

    from ast import literal_eval
    
    a = '["Hello", "World!", 2]'
    b = literal_eval(a)
    # ["Hello", "World!", 2]
    

    请注意,字符串只能包含以下内容:字符串、字节、数字、元组、列表、字典、集合、布尔值和 None(取自文档 here

    【讨论】:

      【解决方案2】:

      在这种情况下你很幸运,因为你的字符串似乎是有效的 JSON,所以你可以这样做:

      from simplejson import json
      
      value = u'[
          [
              [
                  ["Hello","w_0","w_0,w_10",1],
                  [".","w_1","",0," "],
                  ["This","w_2","",0," "],
              ]
              [
                  ["\u4f60\u597d","w_10","w_0,w_10",1],
                  ["\uff0c","w_11","",0],
                  ["\u6211","w_12","",0],
              ],
              "http://www.kekenet.com/menu/201206/187574.shtml",154191
          ]
      ]'
      
      array_value = json.loads(value)
      

      为此,它依赖于使用双引号字符串的字符串(根据 json 规范),即 ["Hello","w_0","w_0,w_10",1] 而不是 ['Hello','w_0','w_0,w_10',1]

      与使用eval 的解决方案相比,它的优势在于更安全……如果此值来自用户输入或其他不受信任的代码,则使用eval 非常危险,而json 是安全的。

      编辑:
      正如已经指出的那样,发布的字符串不是有效的 json ......虽然我想知道这是否是一个错字?

      问题是:

      value = u'[
          [
              [
                  ["Hello","w_0","w_0,w_10",1],
                  [".","w_1","",0," "],
                  ["This","w_2","",0," "],
              ] <-- should be a comma here
              [
                  ["\u4f60\u597d","w_10","w_0,w_10",1],
      

      【讨论】:

      • 这个 ` ]\n[` 不是 JSON。
      • 啊,你说得对,太糟糕了
      • 首先感谢您的帮助。当我在上面转换 unicode 时,它​​起作用了。但是当我转换 u'[["I","w_0",0," "],["said", "w_1",0," "],["\'","w_2",0],["Hello","w_3",1," "],["Kirsten","w_4",0], ["\'","w_5",0," "]],它会引发 ValueError: Invalid \escape。
      • 如果您获得的数据不是标准格式,您必须先对其进行一些转换,可能通过正则表达式。您收到的格式是否有规范?您可以将提供数据的代码更改为仅使用 json 吗?你的新错误中的问题是因为这个"\'"
      猜你喜欢
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多