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中如何解决一道关于列表和字典的问题

12 回复

看到没人回复,我来说一下。
必须指出,你问问题的方式很业余,你的排序依据能写清楚吗,不写清楚,让别人怎么回答你?如果你自己连问问题都不想费功夫,不把问题写的清楚易懂,没有人愿意费功夫回答你的问题。

另外,你做了什么努力,你去 google 了吗,能不能找到现成的答案?或者能不能找到类似的问题和解答?问问题之前要让人看到你的努力,你做了什么?在哪里卡住了?具体遇到了什么解决不了的东西,而不是什么不说,就指着别人给你提供一个现成的代码,这是不好的习惯。

像你这样的问题,在 stackoverflow 上立马遭到 downvote,甚至可能被关闭,因为你的问题丝毫不符合好问题的标准,建议你读一下 stackoverflow 的如何提问的指导 (地址是 https://stackoverflow.com/help/mcve ),另外这篇 what have you tried ( https://mattgemmell.com/what-have-you-tried/) 也建议你读一下。


我无法理解你的问题

我都看懂他想问啥……

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

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

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 老哥没有分组吗

回到顶部