Преобразование строки в список в Python - PullRequest
8 голосов
/ 30 января 2010

Я пытаюсь создать список из аргументов, которые я получаю в URL.

например, у меня есть:

 user.com/?users=0,1,2

Теперь, когда я получаю его в запросе, он приходит в виде строки. Я хочу составить список из "0,1,2" [0,1,2]

Ответы [ 7 ]

31 голосов
/ 30 января 2010

Используйте метод split. Пример:

>>> "0,1,2".split(",")
['0', '1', '2']

Или даже

>>> [int(x) for x in "0,1,2".split(",")]
[0, 1, 2]
6 голосов
/ 30 января 2010

Этот вопрос изначально был помечен как Django, поэтому я буду исходить из этого.

Внутри вашей функции просмотра объект request имеет атрибут GET, который является экземпляром QueryDict . Если вы всегда знаете, что для ключа «пользователи» вы получите список целых чисел через запятую, вы можете сделать что-то подобное в функции просмотра:

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

Это даст вам список строк или пустой список, если «пользователи» не были указаны в GET. Если вам нужен список целых чисел, вы можете обработать его дальше с помощью списка:

users_list = [int(x) for x in users_list]
3 голосов
/ 30 января 2010
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 голосов
/ 30 января 2010

Чтобы преобразовать строку в список, используйте split.

Чтобы преобразовать список строк в список целых чисел, используйте понимание списка с int.

Итак, все это вместе выглядит примерно так:

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

Результаты:

[1, 2, 3]
2 голосов
/ 30 января 2010

Чтобы перейти от "0,1,2" к ['0', '1', '2'], его просто "0,1,2".split(",")

Так что если у вас есть это в переменной users, то users.split(",") выдаст вам список.

Если вам нужны целые числа вместо строк, это будет [int(x) for x in users.split(',')].

0 голосов
/ 26 сентября 2012

У вас есть eval для преобразования строки в "реальный код":

Пример:

>>> l = u"[('0','None'),('2','Taxable Goods'),('4','Shipping')]"
>>> type(l)
<type 'unicode'>

>>> t = eval(l)
>>> type(t)
<type 'list'>
0 голосов
/ 30 января 2010

Вы можете использовать следующий код:

s = 'user.com/?users=0,1,2'
s.rpartition('?users=')[2].split(',')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...