Cómo eliminar extra ‘,’ en tuple en django (python)

Tengo un problema en la construcción de una lista de ID utilizando django. si elijo más de 1 id, está bien, pero si elijo solo uno, producirá “,” en la lista.

testa = tuple([k['id'] for k in queryset.values('id')]) print testa 

si en el queryset tiene exactamente 1 id, se mostrará

 (1234,) 

aparte de eso está bien

 (1234,1244) 

¿Cómo puedo eliminar extra ‘, en la lista’

 (1234,) 

es la representación Python correcta de una tupla. (1234) sería incorrecto ya que se toma como un entero simple entre paréntesis matemáticos, evaluando a 1234 , no como una tupla que lo contiene.

Esto es diferente para las listas porque los corchetes no tienen este doble propósito de significar también el orden de operaciones matemático, por lo que mientras que [1234] y [1234,] son representaciones válidas de una lista de length-1, el valor predeterminado La representación textual puede ser sin la coma extra.

Si está diseñando su propia representación textual de una tupla que no necesita ser la misma que la de Python’s, podría hacer, por ejemplo:

 '(%s)' % ', '.join(map(repr, testa)) 

Para escribir una tupla que contenga un solo valor, debe incluir una coma, aunque solo haya un valor.

Puede indexar la tupla para obtener el resultado deseado:

 print testa[0] >>>> 1234 

En realidad no tienes que hacerlo. el signo de dos puntos está justo allí en una representación de cadena de la tupla. Por ejemplo, simplemente puede crear su propia cadena por

 print "(%s)" % ",".join(testa) 

así es como Python muestra las tuplas con valores individuales, también tenga en cuenta que la syntax recomendada para crear una tupla con un solo valor también es x = (1,) que ayuda a diferenciar una tupla de una llamada de función. Si realmente desea una salida como la describe, puede probar

 testa = tuple([k['id'] for k in queryset.values('id')]) if len(testa)==1: print '(%s)'%testa[0] else: print testa 

Dice que quiere una lista, pero de hecho está creando una tupla.

Para obtener una lista de identificadores, eche un vistazo a values_list

 >>> Entry.objects.values_list('id', flat=True).order_by('id') [1, 2, 3, ...] >>> Entry.objects.filter(id=1).values_list('id', flat=True) [1]