Pythonic moyen de tri de la liste de namedtuples par nom de champ

Je veux trier une liste de uplets nommé sans avoir à se souvenir de l'indice de la fieldname. Ma solution semble plutôt maladroit et a été en espérant que quelqu'un aurait une solution plus élégante.

from operator import itemgetter
from collections import namedtuple

Person = namedtuple('Person', 'name age score')
seq = [
    Person(name='nick', age=23, score=100),
    Person(name='bob', age=25, score=200),
]

# sort list by name
print(sorted(seq, key=itemgetter(Person._fields.index('name'))))
# sort list by age
print(sorted(seq, key=itemgetter(Person._fields.index('age'))))

Grâce,
Nick

  • Est le nom du champ est toujours donné comme une chaîne de caractères ou la solution par @clyfish aussi le travail?
  • Je n'étais pas en train de faire quelque chose de dynamique, de sorte que les deux solutions fonctionnent parfaitement.
InformationsquelleAutor Nick | 2012-08-23