1. ホーム
  2. python

名前付きタプルのリストをフィールド名でソートする Pythonic な方法

2023-10-31 17:54:34

質問

フィールド名のインデックスを記憶することなく、名前付きタプルのリストをソートしたいのです。私の解決策はかなり厄介なようで、誰かがよりエレガントな解決策を持っていることを期待していました。

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'))))

ありがとうございます。 ニック

どのように解決するのですか?

from operator import attrgetter
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)]

名前でリストをソート

sorted(seq, key=attrgetter('name'))

年齢でリストをソート

sorted(seq, key=attrgetter('age'))