[Python-es] Mejorar código de crear cadena

Chema Cortes py en ch3m4.org
Mie Mar 13 03:08:19 CET 2013


El 12/03/13 17:14, Miguel Beltran R. escribió:
> Me gusta python pero casi no lo uso por lo que estoy atorado en algo que
> estoy seguro que es sencillo de mejorar pero no se como
> 
> tengo el siguiente codigo (en general)
> 
> ----CÓDIGO 1----
> rst=dame_registros()
> s2="valor: 'cadena', "
> s=""
> for r in rst:
>    if len(s) <> 0: s+=", "
>    s+="'%s'" % (r[0])
> s2+="suggestions: [%s]" % (s)

Así de pronto:

rst=dame_registros()

s=", ".join(["'%s'" % r[0] for r in rst])

s2=("valor: 'cadena', " +
   "suggestions: [%s]" % s )


Pero si te creas una función, la podrás aprovechar mejor más adelante:


SEP=", "

def to_json(arg=None, **kw):

    if arg is None:
        arg=kw

    if isinstance(arg, str):
        return "'%s'" % arg
    elif isinstance(arg, (list, tuple)):
        return "[%s]" % SEP.join([to_json(x) for x in arg])
    elif isinstance(arg, dict):
        return SEP.join( ["%s: %s" % (k,to_json(v)) for (k,v) in
arg.items()] )
    else:
        #default result
        return to_json(str(arg))

rst=dame_registros()

res=to_json(
        valor="cadena",
        suggestions=[r[0] for r in rst]
    )


-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales


Más información sobre la lista de distribución Python-es