请教,一行代码进行排序。

2015-04-24 11:38:51 +08:00
 cheerzeng
怎么用python一行代码对下面的列表进行排序?
l = [{'name':'n0','value': 93}, {'name':'n1','value': 90}, {'name':'n2','value': 95}, {'name':'n3','value': 93}, {'name':'n4','value': 90}]
3474 次点击
所在节点    Python
10 条回复
codegear
2015-04-24 11:43:18 +08:00
不知楼主的排序规则。大体上可以sort(l, key=...)
ledzep2
2015-04-24 11:43:19 +08:00
l.sort(key=lambda x:x['value'])
hahastudio
2015-04-24 11:46:06 +08:00
按什么排序?
list.sort = sort(...)
L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
cmp(x, y) -> -1, 0, 1
或者用 list(sorted( ... ))
sorted(...)
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

比如
>>> l.sort(key=lambda i:i['value'])
>>> l
[{'name': 'n1', 'value': 90}, {'name': 'n4', 'value': 90}, {'name': 'n0', 'value': 93}, {'name': 'n3', 'value': 93}, {'name': 'n2', 'value': 95}]
cheerzeng
2015-04-24 15:24:50 +08:00
@codegear @ledzep2 @hahastudio 就是分数高低的规则。

原来直接用sort就可以啦,我还在想怎么把排序算法搞进去呢。
hahastudio
2015-04-24 15:29:15 +08:00
@cheerzeng one line quick sort 也是经典的 snippet,虽然只能用来炫技
qsort = lambda l: [] if not l else qsort([x for x in l[1:] if x <= l[0]]) + [l[0]] + qsort([x for x in l[1:] if x > l[0]])
cheerzeng
2015-04-24 16:53:36 +08:00
@hahastudio 这个我也看到了,是不是除了快速排序,就不可能用其他算法放一行代码里了?
hahastudio
2015-04-24 16:55:56 +08:00
@cheerzeng https://code.activestate.com/recipes/578909-one-liner-sort-method-modified-selection-sort/
一行除了炫技,真没什么用= =
极端点的话,Python 还是有 ; 的
cheerzeng
2015-04-24 17:04:50 +08:00
@hahastudio 回头看看,谢谢啊~
pupboss
2015-04-24 17:15:31 +08:00
OC 做过类似的

```
NSArray *arr = [self.planArr sortedArrayUsingComparator:^NSComparisonResult(ExamPlan *obj1, ExamPlan *obj2) {

NSComparisonResult result = [obj1.startTime compare:obj2.startTime];
return result;
}];
```
cheerzeng
2015-04-26 12:22:00 +08:00
@pupboss 昨天忘记回复你了。
没学过OC,所以看不懂,不过还是谢谢你的分享^ω^

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/185967

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX