Python自定义排序

时间:2015-10-09 16:09:42

标签: python sorting lambda

我有一个我要排序的字典对象列表(从csv中读取)。 E.g。

l_data.sort(key=lamdba x: (x['fname'], x['lname']))

现在我想让代码更灵活,并希望根据输入对键进行排序,例如:

def sort_data(l_data, keys):
    l_data.sort(key=lambda x: (x[d] for d in keys))
    ... ...

我收到以下错误:

TypeError: unorderable types: generator() < generator()

1 个答案:

答案 0 :(得分:3)

(x[d] for d in keys)是一个生成器表达式(生成generator个对象)。如果要创建元组,请使用tuple(...)包装该生成器表达式:

def sort_data(l_data, keys):
    l_data.sort(key=lambda x: tuple(x[d] for d in keys))
    # code

虽然使用operator.itemgetter可以大大简化您的代码:

from operator import itemgetter

def sort_data(l_data, keys):
    l_data.sort(key=itemgetter(*keys))
    # code