如何在python / django中从unicode列表转换为普通列表

时间:2017-12-09 14:05:34

标签: python django

如何转换此列表:

list = [u"[u'book1', u'book2', u'book3']"]into this list:

为:

[u'book1', u'book2', u'book3']

我试过了:

n = ast.literal_eval(list)

但我收到了这个错误:

  

ValueError:格式错误的字符串

如果没有" u"?

,我还能做些什么才能更改此列表

3 个答案:

答案 0 :(得分:3)

ast.literal_eval将节点或字符串作为参数。 列表既不是。示例列表中的第一个值是字符串, 你可以通过:

alist = [u"[u'book1', u'book2', u'book3']"]
ast.literal_eval(alist[0])
# produces: ['book1', 'book2', 'book3']

答案 1 :(得分:0)

如果您知道列表的数据是安全的,则可以使用eval()

>>> a = [u"[u'book1', u'book2', u'book3']"]
>>> eval(a[0])
['book1', 'book2', 'book3']

否则,最安全的选择是使用literal_eval模块中的ast

>>> from ast import literal_eval
>>> literal_eval(a[0])
['book1', 'book2', 'book3']

答案 2 :(得分:0)

您收到malformed string因为literal_eval期待一个字符串,但您传递的是一个列表。看看最外层的分隔符。对于字符串,它们应该是匹配的引号,但是你有方括号。

>>> mylist = [u"[u'book1', u'book2', u'book3']"]
>>> ast.literal_eval(mylist.pop())
[u'book1', u'book2', u'book3']   # in Python 2
['book1', 'book2', 'book3']      # in Python 3