Python中如何解决一道关于列表和字典的问题

原始数据是:

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}]]

Python中如何解决一道关于列表和字典的问题

10 回复

我都看懂他想问啥……


,我也知道,但是这样敷衍潦草的问题,我觉得不用回答,我是想强调这点。

,主要是想说明如何提问,才能得到有效的回答。

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])

很简单啊,一行
print(sorted(data, cmp=lambda x, y: x[‘a’] < y[‘a’] if(x[‘a’] != y[‘a’]) else x[‘b’] < y[‘b’]))

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)

python<br>from itertools import groupby<br>print([list(v) for k,v in groupby(data,lambda x:x['a'])])<br>

data.sort(key = lambda x:(x[‘a’],x[‘b’]))

一行搞定,就是这么简单~

>>> 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}]]
>>>

#9 老哥没有分组吗

回到顶部