[Python-Dev] Re: other "magic strings" issues
David Eppstein
eppstein at ics.uci.edu
Mon Nov 10 20:48:06 EST 2003
In article <200311102251.10904.aleaxit at yahoo.com>,
Alex Martelli <aleaxit at yahoo.com> wrote:
> >>> map(string.upper, ('ciao', u'ciao'))
> ['CIAO', u'CIAO']
>
> >>> map(str.upper, ('ciao', u'ciao'))
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: descriptor 'upper' requires a 'str' object but received a 'unicode'
>
> >>> map(unicode.upper, ('ciao', u'ciao'))
> Traceback (most recent call last):
> File "<stdin>", line 1, in ?
> TypeError: descriptor 'upper' requires a 'unicode' object but received a 'str'
>
>
> To be honest I don't currently have any real use case that's quite like this
> (i.e., based on a mix of string and unicode objects), but I DO have cases
> in completely different domains where I end up coding the like of (sigh...):
Actually I had exactly this case recently: I had an object that needed
to store a pointer to a function for normalizing item names prior to
looking them up in a dictionary, and most of the time (but not always)
that function was lower(). But I wanted to handle both str and unicode,
so I wrote a one-line function:
def lower(x): return x.lower()
> ...and we're back to wishing for a way to pass a nonlambda-callable. E.g.
> a string-related example would be "order the strings in list lotsastrings
> (which may be all plain strings, or all unicode strings, on different calls
> of this overall function) in case-insensitive-alphabetical order". In 2.4
> _with_ the string module that's a snap:
>
> lotsastrings.sort(key=string.upper)
Is that really alphabetical? It seems like it orders them based on the
ordinal value of the characters, which doesn't work so well for unicodes.
The last time I needed this I couldn't figure out how to get a
reasonable case-insensitive-alphabetical order in pure python, so I used
PyObjC's NSString.localizedCaseInsensitiveCompare_ instead; a pure
Python solution that works as well as that one would be welcome.
--
David Eppstein http://www.ics.uci.edu/~eppstein/
Univ. of California, Irvine, School of Information & Computer Science
More information about the Python-Dev
mailing list