Python自定义排序
我有一个要排序的字典对象列表(从csv读取)。例如Python自定义排序,python,sorting,lambda,Python,Sorting,Lambda,我有一个要排序的字典对象列表(从csv读取)。例如 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(
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()
TypeError:无序类型:generator()
(x[d]表示键中的d)
是一个生成器表达式(生成generator
对象)。如果要创建元组,请使用tuple(…)
包装该生成器表达式:
尽管您的代码可以通过以下方式大大简化:
如果您试图按生成器对键中的d进行排序,则需要先将生成器的输出转换为元组
见谢谢!itemgetter真的很像蟒蛇!
def sort_data(l_data, keys):
l_data.sort(key=lambda x: tuple(x[d] for d in keys))
# code
from operator import itemgetter
def sort_data(l_data, keys):
l_data.sort(key=itemgetter(*keys))
# code