2010-01-30 4 views
8

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

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

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

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

+2

удалена django, поскольку это не вопрос django –

+2

Но Django может иметь некоторую поддержку для разбора URL-адресов, которые могут представлять интерес. –

ответ

31

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

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

Или даже

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

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

Итак, если у вас есть переменная users, тогда users.split(",") предоставит вам список.

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

2

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

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

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

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

Результаты:

[1, 2, 3] 
+0

Я просто догадываюсь, так как я не использовал фреймворк, но я бы предположил, что Django не заставит его разобрать всю строку запроса, нет? – danben

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

ast.literal_eval, как eval, но совершенно безопасен, так как он ограничивает строку литералов, такие как строки, числа, кортежи, списки, dicts, булевы и None.

Другая альтернатива, но не упоминается, является использование map:

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

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

s = 'user.com/?users=0,1,2' 
s.rpartition('?users=')[2].split(',') 
6

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

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

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

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

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

Вы Eval, чтобы преобразовать строку в «реальный код»:

Пример:

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

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

'eval' не рекомендуется. – 2012-09-26 07:24:48

+0

Он определенно просил что-то еще! –