Sans l'appel à lower()
, ce qui suit pourrait être considéré comme un peu plus propre que d'utiliser un lambda:
import operator
catlist.sort(key=operator.attrgetter('name'))
Ajouter cet appel à lower()
et vous entrez dans un monde de douleur de composition de fonction. Utilisation trouvé l » compose()
Ants Aasma dans une réponse à this other SO question, vous pouvez aussi voir la lumière qui est la programmation fonctionnelle (je déconne Tous les paradigmes de programmation ont sûrement leur temps et lieu..):
>>> def compose(inner_func, *outer_funcs):
... if not outer_funcs:
... return inner_func
... outer_func = compose(*outer_funcs)
... return lambda *args, **kwargs: outer_func(inner_func(*args, **kwargs))
...
>>> class A(object):
... def __init__(self, name):
... self.name = name
...
>>> L = [A(i) for i in ['aa','a','AA','A']]
>>> name_lowered = compose(operator.attrgetter('name'),
operator.methodcaller('lower'))
>>> print [i.name for i in sorted(L, key=name_lowered)]
['a', 'A', 'aa', 'AA']
Il serait utile que vous lisez les messages d'erreur, celui de vos points de code ** exactement sur le point ** dans 'x.name' – Marian