sortedでkeyにlambda使ったやり方
sortedでkeyにlambda使った物をよく見かけるのでまとめておきます
sorted((list or dict) key=lambda x: x[0])
こんなのです
で使い方としては
sorted(【リストor辞書】, key=lambda x: 【keyにしたい要素】)
こんな感じです
例としては
dictionary = [['な',3], ['か',4], ['と',1], ['お',2]] print(dictionary) # [['な', 3], ['か', 4], ['と', 1], ['お', 2]] sorted_dict = sorted(dictionary, key=lambda x: x[0]) # [['お', 2], ['か', 4], ['と', 1], ['な', 3]] sorted_dict= sorted(dictionary, key=lambda x: x[1]) # [['お', 2], ['か', 4], ['と', 1], ['な', 3]]
sorted関数のkeyに「要素xを受け取り、x[1]を返す」というlambda式を指定している. 従って,sorted関数は、リストの2番目の要素をkeyとしてソートを行うようになった.
また、keyを関数として指定も可能
dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]] print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]] def get_value(name_and_value): name, value = name_and_value return value sortedDict = sorted(dictionary, key=get_value) print(sortedDict) # [['おおさか', 2], ['かながわ', 4], ['とうきょう', 1], ['なら', 3]] def get_name(name_and_value): name, value = name_and_value return name sortedDict = sorted(dictionary, key=get_name) print(sortedDict) # [['とうきょう', 1], ['おおさか', 2], ['なら', 3], ['かながわ', 4]]
その他の例1
class Hoge: def __init__(self, i, name): self.i = i self.name = name def __repr__(self): return "%d:%s" % (self.i, self.name) l2 = [Hoge(2, 'c'), Hoge(3, 'a'), Hoge(1, 'b')] print(l2) #[2:c, 3:a, 1:b] sort_result = sorted(l2, key=lambda h: h.name) print(sort_result) #[3:a, 1:b, 2:c]
上記の例はHogeオブジェクトのname属性を返す関数を指定したことで、name属性でソートしている
その他の例2 operatorモジュールのattrgetter関数を用いた物
特定の属性を返す関数は、operatorモジュールのattrgetter関数を使えば簡単に作成できる。
>>> import operator >>> l2 = [Hoge(2, 'c'), Hoge(3, 'a'), Hoge(1, 'b')] >>> sorted(l2, key=operator.attrgetter('name')) [3:a, 1:b, 2:c]
参考