我有一个我要排序的字典对象列表(从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()
答案 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