usort in Python

特定キーでソートするってのをワラワラ関数垂れ流したくない

L = [{'key_a':'aaa','key_b':456},
     {'key_a':'ccc','key_b':123},
     {'key_a':'bbb','key_b':987},
     {'key_a':'ddd','key_b':567},
     ]

def usort(key):
    """
    関数を返す
    """
    fnc = None
    def f(a,b):
        return cmp(a[key],b[key])
    return f

for x in L:print(x)

L.sort(usort('key_a'))
for x in L:print(x)

L.sort(usort('key_b'),reverse=True)
for x in L:print(x)

やっとさいきん、関数を返すということがわかってきた気がする。理解遅い。

これが

{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'ccc', 'key_b': 123}
{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ddd', 'key_b': 567}

こう

{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ccc', 'key_b': 123}
{'key_a': 'ddd', 'key_b': 567}

こう

{'key_a': 'bbb', 'key_b': 987}
{'key_a': 'ddd', 'key_b': 567}
{'key_a': 'aaa', 'key_b': 456}
{'key_a': 'ccc', 'key_b': 123}