El 2012/6/6 Raimon Esteve <raimonest...@gmail.com> escribió:
> Bueno ¿y el ganador es ......?
>
>>>> from htmlentitydefs import codepoint2name
>>>> str = u'Això és un cançò'
>>>> ''.join([ord(c) in codepoint2name and "&%s;" % codepoint2name[ord(c)] or c 
>>>> for c in str])
> u'Aix&ograve; &eacute;s un can&ccedil;&ograve;'
>
> Lo dejamos así, Almenos ha quedado compacto ;)

Pues aún se puede compactar más usando "generadores" (y más eficiente):

''.join(ord(c) in codepoint2name and "&%s;" % codepoint2name[ord(c)]
or c for c in str)

..aún más usando el operador ternario:

''.join("&%s;"%codepoint2name[ord(c)] if ord(c) in codepoint2name else
c for c in str)


A pesar de todo, prefiero que sea legible a costa de más líneas:

def fmt(c):
    r=codepoint2name.get(ord(c),c)
    return r if len(r)==1 else "&"+r+";"

print ''.join(fmt(c) for c in s)



-- 
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a