2010-01-30 13 views
8

Estoy tratando de crear una lista de argumentos que recibo en una URL.convertir una cadena a la lista en Python

por ejemplo tengo:

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

Ahora cuando lo reciba en la solicitud se trata como una cadena. Quiero hacer una lista de "0,1,2" [0,1,2]

+2

removido el django tag ya que no es realmente una pregunta de django –

+2

Pero Django puede tener algo de soporte para analizar las URL que puedan ser de su interés. –

Respuesta

31

utilizar el método de split. Ejemplo:

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

O incluso,

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

para ir de "0,1,2" a [ '0', '1', '2'] es solo "0,1,2".split(",")

Así que si lo tiene en una variable users, entonces users.split(",") le dará la lista.

Si los necesita como enteros en lugar de cadenas, sería [int(x) for x in users.split(',')].

2

Para convertir la cadena en una lista, utilice split.

Para convertir una lista de cadenas a una lista de números enteros, utilice una lista por comprensión con int.

Así que ponerlo todo junto, se ve algo como esto:

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

Resultados:

[1, 2, 3] 
+0

Solo estoy adivinando, ya que no he usado el framework, pero me imagino que Django no lo haría analizar la secuencia completa de la consulta, ¿no? – danben

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

ast.literal_eval es como eval, pero completamente seguro ya que restringe la cadena de literales tales como cadenas, números, tuplas, listas, predice, booleanos y None.

Otra alternativa, aún no se ha mencionado, es el uso de map:

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

Puede utilizar siguiente código:

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

Esta pregunta fue originalmente marcada Django, así que voy a proceder con esa en mente.

Dentro de su función de vista, el objeto request tiene un atributo GET que es una instancia de QueryDict. Si siempre sabe que va a obtener una lista separada por comas de los números enteros para los "usuarios" clave, se podría hacer algo como esto en su función de vista:

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

que le dará una lista de cadenas, o una lista vacía si "usuarios" no se suministró en GET.Si usted quiere una lista de números enteros que podría procesar más a fondo con una lista por comprensión:

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

Tienes eval para convertir la serie de "código real":

Ejemplo:

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

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

'eval' no es recomendado. –

+0

¡Definitivamente pidió algo más! –

Cuestiones relacionadas