Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python自定义排序_Python_Sorting_Lambda - Fatal编程技术网

Python自定义排序

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(

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