84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
def sort(): return sorted(a,key=lambda x:(x['name'],x['age']),reverse=True)
就是说如果我传name就按name排序,如果传name和age就按照这两个key双重排序,如果传了三个key以此类推
光阴似箭催人老,日月如移越少年。
def sort(*arg): return sorted(a,key=lambda x,*arg:(x[y] for y in arg),reverse=True)
根据你改的,没测试过 ,你可以测测。希望我没写错。这是我测试的结果:
>>> a = {'a': {'a1': 1, 'a2': 2, 'a3': 3}, 'b': {'a1': 2, 'a2': 1, 'a3': 3}, 'c': {'a1': 1, 'a2': 1, 'a3': 3}} >>> sort('a1','a2') ['c', 'b', 'a']
看起来没什么问题呢
不知道你是不是想这样,如下,每个tuple中第一列是姓名,第二列是成绩,第三列是年龄目的是先按成绩排序,然后按照年龄排序
# coding: utf-8 from operator import itemgetter, attrgetter # 每个tuple中第一列是姓名,第二列是成绩,第三列是年龄 student = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10)] # 按照年龄排序 print(sorted(student, key=itemgetter(2))) # 先按照成绩排序,然后按照年龄排序 print(sorted(student, key=itemgetter(1, 2)))
参考Python cookbook里的内容通过某个关键字排序一个字典列表如下可以实现动态传参数
rows = [ {'fname': 'Brian', 'lname': 'Jones', 'uid': 1010}, {'fname': 'David', 'lname': 'Beazley', 'uid': 1002}, {'fname': 'John', 'lname': 'Cleese', 'uid': 1001}, {'fname': 'Big', 'lname': 'Jones', 'uid': 1004} ] def my_sort(*args): print(sorted(rows, key=itemgetter(*args))) return sorted(rows, key=itemgetter(*args)) hello = my_sort('lname', 'uid') print('==' * 40) print(hello)
operator的文档介绍在下面链接operator.itemgetter
一楼的答案是有问题的,虽然不会报错,但是并没有起到排序的效果
下面附验证后的可行方法:
def sort(a, args): return sorted(a, key=lambda x: tuple(x[i] for i in args), reverse=True) dic_sorted = sort(lst, ['time', 'id', 'type'])
args接受的是一个列表
根据你改的,没测试过 ,你可以测测。希望我没写错。
这是我测试的结果:
看起来没什么问题呢
不知道你是不是想这样,
如下,每个tuple中第一列是姓名,第二列是成绩,第三列是年龄
目的是先按成绩排序,然后按照年龄排序
参考Python cookbook里的内容
通过某个关键字排序一个字典列表
如下可以实现动态传参数
operator的文档介绍在下面链接
operator.itemgetter
一楼的答案是有问题的,虽然不会报错,但是并没有起到排序的效果
下面附验证后的可行方法:
args接受的是一个列表