Foros del Web » Programando para Internet » Python »

Como obtener todos los objetos alfabéticamente

Estas en el tema de Como obtener todos los objetos alfabéticamente en el foro de Python en Foros del Web. Hola, estoy tratando de poder mostrar mis artículos alfabéticamente, estuve leyendo un poco pero no se por donde empezar, agradezco cualquier orientación. Saludos....
  #1 (permalink)  
Antiguo 11/01/2013, 20:14
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 2
Como obtener todos los objetos alfabéticamente

Hola, estoy tratando de poder mostrar mis artículos alfabéticamente, estuve leyendo un poco pero no se por donde empezar, agradezco cualquier orientación.

Saludos.
  #2 (permalink)  
Antiguo 11/01/2013, 20:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Como obtener todos los objetos alfabéticamente

Si estas trabajando con un orm como el de Django o SQLAlchemy entonces lo mas conveniente es usar las funciones de ordenamiento de la base de datos.

Por otro lado, si tienes una lista de objetos entonces puedes hacer algo asi:

Código Python:
Ver original
  1. books = ["The Pragmatic Programmer", "Code Complete", "Programming Perls", "The Mythical Man Month"]
  2. print books
  3. books.sort()
  4. print books
  #3 (permalink)  
Antiguo 12/01/2013, 07:57
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años
Puntos: 6
Respuesta: Como obtener todos los objetos alfabéticamente

Supongo que depende de como estén guardados los datos.

Yo tengo un caso en que los items están en un archivo de texto plano, cada línea tiene un item, y en ese caso los leo y los cargo en una lista y luego los ordeno

Código:
import csv

my_list = []
with open('miarchivo.txt', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter='|')
#    reader.next() # Ignore headers
    for row in reader:
        my_list.append((str(row[0])))

my_list.sort()
for x in my_list:
    print x
  #4 (permalink)  
Antiguo 16/01/2013, 14:29
 
Fecha de Ingreso: enero-2013
Ubicación: 127.0.0.1
Mensajes: 16
Antigüedad: 11 años, 10 meses
Puntos: 6
Respuesta: Como obtener todos los objetos alfabéticamente

Como te dijeron , siempre es mejor usar la funcion de ordenamiento segun lo que estes usando. Si guardas en lista es mejor usar sort, antes de hacerte tu propia funcion... A menos que haya alguna condicion especial.

Saludos
  #5 (permalink)  
Antiguo 16/01/2013, 20:08
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Como obtener todos los objetos alfabéticamente

Al final no me hice entender quizás abra otro topic, a lo que yo me refiero es al estilo:

A,B,C,D,E,F...0,1,2,3..

Para cuando le des en la A te muestre todos los artículos que empiezan con "A". Estoy usando Django.
  #6 (permalink)  
Antiguo 17/01/2013, 11:35
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como obtener todos los objetos alfabéticamente

Hubieras empezado diciendo que usabas Django.

Primero te recomiendo leer la documentación a cerca de las queries: https://docs.djangoproject.com/en/de...cs/db/queries/

Por ejemplo para ordenarlos alfabetiacamente:
Código Python:
Ver original
  1. Articulo.objects.all().order_by('titulo')
Para mostrar los que empiezan con A:
Código Python:
Ver original
  1. Articulo.objects.filter(titulo__startswith='A').order_by('titulo')

Saludos
__________________
Grupo Telegram Docker en Español
  #7 (permalink)  
Antiguo 18/01/2013, 13:50
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 13 años, 1 mes
Puntos: 2
Respuesta: Como obtener todos los objetos alfabéticamente

Gracias a todos y envíe puntos como agradecimientos, Carlangueitor entonces creo una lista con todo el abecedario y números y luego lo pongo así:

Código Python:
Ver original
  1. lista_abecedario = ['A','B','C','D'...'#']
  2. Objecto.objects.filter(titulo__startswith=lista_abecedario).order_by('titulo')

Gracias y saludos.
  #8 (permalink)  
Antiguo 18/01/2013, 14:12
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como obtener todos los objetos alfabéticamente

mmm, no, prueba eso y verás que te da error. Lee el link que te pasé

Supongo que no quieres mandar los artículos con todas las letras de un jalón, si no quieres elegir. Algo como esto:

Código Python:
Ver original
  1. # Esta es tu vista (omitiendo los imports y demás cosas)
  2. def listado(request, inicial='A'):
  3.     articulos = Articulo.objects.filter(titulo__startswith=inicial).order_by('titulo')
  4.     context = RequestContext(request, {'articulos': articulos})
  5.     return render_to_response('listado-articulos.html', context)
  6.  
  7. # Tu urlpattern
  8. url(r'^articulos/(?P<inicial>[^/]+)/$', 'app.views.listado')

Saludos
__________________
Grupo Telegram Docker en Español
  #9 (permalink)  
Antiguo 21/01/2013, 14:53
colextey
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como obtener todos los objetos alfabéticamente

Cita:
Iniciado por Carlangueitor Ver Mensaje
mmm, no, prueba eso y verás que te da error. Lee el link que te pasé

Supongo que no quieres mandar los artículos con todas las letras de un jalón, si no quieres elegir. Algo como esto:

Código Python:
Ver original
  1. # Esta es tu vista (omitiendo los imports y demás cosas)
  2. def listado(request, inicial='A'):
  3.     articulos = Articulo.objects.filter(titulo__startswith=inicial).order_by('titulo')
  4.     context = RequestContext(request, {'articulos': articulos})
  5.     return render_to_response('listado-articulos.html', context)
  6.  
  7. # Tu urlpattern
  8. url(r'^articulos/(?P<inicial>[^/]+)/$', 'app.views.listado')

Saludos
Hola, yo también tengo la duda, yo trabajo con views basadas en clase, trate de hacerlo como lo tienes pero no funciona, haber si me hago entender el resultado seria algo así:



Espero me puedan también echar una mano con esto muchas gracias y saludos.
  #10 (permalink)  
Antiguo 21/01/2013, 15:04
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como obtener todos los objetos alfabéticamente

Una cosa es mostrar el "indice" de letras y otra filtrar los objetos conforme a eso. Para hacer el listado de letras yo lo uso más o menos así:

Código Python:
Ver original
  1. # En la Vista
  2. import string
  3. letras = [a for a in string.ascii_uppercase]
Código HTML:
Ver original
  1. <ul>
  2. {% for letra in letras %}
  3.     <li>
  4.         <a href="/articulos/{{ letra }}/">{{ letra }}</a>
  5.     </li>
  6. {% endfor %}
  7. </ul>

No sé que estés haciendo en tu vista así que no puedo ver que es lo que haces mal. Muestra el código, quizá tengas que sobreescribir el método get_context_data() de tu vista.

Saludos
__________________
Grupo Telegram Docker en Español
  #11 (permalink)  
Antiguo 21/01/2013, 16:13
colextey
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como obtener todos los objetos alfabéticamente

Hola, yo estoy tratando de hacer ambas cosas puesto que si no tenemos el indice de letras no se puede filtrar los objetos:

Código Python:
Ver original
  1. import string
  2.  
  3. # Esta es la vista para filtrar luego alfabéticamente
  4. class Alfa(ListView):
  5.     model = Genero
  6.     template_name = "anime/genero_list.html"
  7.     paginate_by = 1
  8.  
  9.     def get_queryset(self):
  10.         self.titulo = get_object_or_404(Articulo, slug__exact=self.kwargs['slug_titulo'])#aca supongo que debo hacer el query
  11.         return Articulo.objects.filter(titulo=self.titulo)
  12.     def get_context_data(self, **kwargs):
  13.         context = super(Alfa, self).get_context_data(**kwargs)
  14.         context['alfabeticamente'] = self.titulo
  15.         context['letras'] = [a for a in string.ascii_uppercase]
  16.         return context
  17. # fin vista alfabeticamente

La idea es mostrar claro el indice de letras y luego al darle click a cada letra te lleva a todos los artículos que empiezan con la letra escogida.

Saludos.
  #12 (permalink)  
Antiguo 21/01/2013, 16:25
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como obtener todos los objetos alfabéticamente

Más o menos sería algo así:

Código Python:
Ver original
  1. # La vista
  2. import string
  3.  
  4.  
  5. class Alfa(ListView):
  6. * * model = Genero
  7. * * template_name = "anime/genero_list.html"
  8. * * paginate_by = 1
  9. *
  10. * * def get_queryset(self):
  11. * * * * return Articulo.objects.filter(titulo__startswith=self.kwargs['inicial'])
  12. * * def get_context_data(self, **kwargs):
  13. * * * * context = super(Alfa, self).get_context_data(**kwargs)
  14. * * * * context['letras'] = [a for a in string.ascii_uppercase]
  15. * * * * return context
  16.  
  17.  
  18. #La url
  19. url(r'^articulos/(?P<inicial>[^/+]+)/$', Alfa.as_view())

No probé nada, así que comenta qué error te sale, si es que salta.

Saludos
__________________
Grupo Telegram Docker en Español
  #13 (permalink)  
Antiguo 21/01/2013, 23:27
colextey
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como obtener todos los objetos alfabéticamente

Gracias de nuevo tu código funciona perfectamente, de esta manera quedaría filtrado por la primera "letra" alfabéticamente, si el articulo empieza por un numero, un símbolo, punto, podría también filtrarlo¿? espero no abusar de la ayuda.

Gracias y saludos.
  #14 (permalink)  
Antiguo 22/01/2013, 10:59
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 8 meses
Puntos: 1329
Respuesta: Como obtener todos los objetos alfabéticamente

Claro, como puedes ver en la documentación, startswith no pide un tipo específico.

Saludos
__________________
Grupo Telegram Docker en Español
  #15 (permalink)  
Antiguo 23/01/2013, 02:12
colextey
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Como obtener todos los objetos alfabéticamente

Cita:
Iniciado por Carlangueitor Ver Mensaje
Claro, como puedes ver en la documentación, startswith no pide un tipo específico.

Saludos
Te hago una consulta, como obtienes la url absoluta, he estado tratando agregar un current class a la url que este activa. Gracias.

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:03.