Python中将字符串转换为列表

9
我将尝试从我在URL中接收到的参数创建一个列表。
例如,我有:
 user.com/?users=0,1,2

现在当我在请求中接收到它时,它是一个字符串。我想把"0,1,2"变成一个列表 [0,1,2]。


2
已删除Django标签,因为这不是一个真正的Django问题。 - Tor Valamo
2
但是Django可能对解析URLs有一些支持,这可能会引起您的兴趣。 - Brian Neal
7个回答

31
使用split方法。例如:
>>> "0,1,2".split(",")
['0', '1', '2']

或者,

>>> [int(x) for x in "0,1,2".split(",")]
[0, 1, 2]

7

这个问题最初被标记为Django,所以我会考虑这一点。

在您的视图函数中,request对象有一个GET属性,它是QueryDict的实例。如果您总是知道您将获得一个以逗号分隔的整数列表作为键“users”,那么您可以在视图函数中执行以下操作:

users_list = request.GET('users', "").split(',')

这将为您提供一个字符串列表,如果在GET中没有提供“users”,则为空列表。如果您想要一个整数列表,可以使用列表推导式进一步处理:

users_list = [int(x) for x in users_list]

3
import ast
x=ast.literal_eval('0,1,2')
print(x)
# (0, 1, 2)

ast.literal_eval类似于eval,但完全安全,因为它将字符串限制为字面值,例如字符串、数字、元组、列表、字典、布尔值和None

另一个选择是使用map,尚未提及:

x=map(int,'0,1,2'.split(','))

2

使用 split 将字符串转换为列表。

使用带有 int 的列表推导式将字符串列表转换为整数列表。

将所有内容组合起来,看起来像这样:

s = '0,1,2'
l = [int(x) for x in s.split(',')]

结果:

[1, 2, 3]

我只是猜测,因为我没有使用过这个框架,但我想Django不会让他自己解析整个查询字符串,对吧? - danben

2

要将“0,1,2”转换为['0','1','2'],只需使用"0,1,2".split(",")

所以如果你把它存在一个变量users中,那么users.split(",")将会给你这个列表。

如果你需要将它们作为整数而不是字符串,那么可以使用[int(x) for x in users.split(',')]


0
你可以使用以下代码:
s = 'user.com/?users=0,1,2'
s.rpartition('?users=')[2].split(',')

-2
你可以使用 eval 将字符串转换为“真正的代码”:
示例:
>>> l = u"[('0','None'),('2','Taxable Goods'),('4','Shipping')]"
>>> type(l)
<type 'unicode'>

>>> t = eval(l)
>>> type(t)
<type 'list'>

他肯定是要求别的东西了! - Aakash Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接