原始数据是:
data = [{'a':10,'b':100}, {'a':10,'b':200},
{'a':20,'b':500}, {'a':20,'b':400},
{'a':30,'b':400}]
排序后是:
data = [[{'a':10,'b':100}, {'a':10,'b':200}],
[{'a':20,'b':500}, {'a':20,'b':400}],
[{'a':30,'b':400}]]
1
jdhao 2018-11-07 23:48:11 +08:00 2
看到没人回复,我来说一下。
必须指出,你问问题的方式很业余,你的排序依据能写清楚吗,不写清楚,让别人怎么回答你?如果你自己连问问题都不想费功夫,不把问题写的清楚易懂,没有人愿意费功夫回答你的问题。 另外,你做了什么努力,你去 google 了吗,能不能找到现成的答案?或者能不能找到类似的问题和解答?问问题之前要让人看到你的努力,你做了什么?在哪里卡住了?具体遇到了什么解决不了的东西,而不是什么不说,就指着别人给你提供一个现成的代码,这是不好的习惯。 像你这样的问题,在 stackoverflow 上立马遭到 downvote,甚至可能被关闭,因为你的问题丝毫不符合好问题的标准,建议你读一下 stackoverflow 的如何提问的指导 (地址是 https://stackoverflow.com/help/mcve ),另外这篇 what have you tried ( https://mattgemmell.com/what-have-you-tried/) 也建议你读一下。 |
5
necomancer 2018-11-08 00:06:56 +08:00 1
t = sorted(data, key=(lambda x : (x['a'], x['b'])))
ret = [[]] for prv, nxt in zip(t[:-1], t[1:]): ....tmp = ret[-1] ....tmp.append(prv) ....if prv['a']!=nxt['a']: ........ret.append([]) tmp = ret[-1] tmp.append(t[-1]) |
6
leavan 2018-11-08 00:17:42 +08:00
很简单啊,一行
print(sorted(data, cmp=lambda x, y: x['a'] < y['a'] if(x['a'] != y['a']) else x['b'] < y['b'])) |
7
leavan 2018-11-08 00:32:22 +08:00
emmm..好像审错题了,那就加一行
s_data = sorted(data, cmp=lambda x, y: x['a'] < y['a'] if(x['a'] != y['a']) else x['b'] < y['b']) res = [s_data[i: (i+1)] for i in range((len(s_data) + 1) / 2)] print(res) |
8
AlisaDestiny 2018-11-08 00:38:22 +08:00 1
```python
from itertools import groupby print([list(v) for k,v in groupby(data,lambda x:x['a'])]) ``` |
9
lijun1993 2018-11-08 11:00:37 +08:00
data.sort(key = lambda x:(x['a'],x['b']))
一行搞定,就是这么简单~ |
10
xpresslink 2018-11-08 12:24:47 +08:00 1
>>> data = [{'a':10,'b':100}, {'a':10,'b':200},
{'a':20,'b':500}, {'a':20,'b':400}, {'a':30,'b':400}] >>> from itertools import groupby >>> [list(g) for _,g in groupby(data, lambda x:x['a'])] [[{'a': 10, 'b': 100}, {'a': 10, 'b': 200}], [{'a': 20, 'b': 500}, {'a': 20, 'b': 400}], [{'a': 30, 'b': 400}]] >>> |