[英]convert list of dict into list of list of dict
I have a list of dictionary. 我有字典清单。
l = [{'row':1}, {'row':2}, {'row':1}, {'row':3}, {'row':1}]
I want output as : 我想要输出为:
x = [[{'row':1}, {'row':1}, {'row':1}], [{'row':2}], [{'row':3}]]
I want lists of those dicts whose 'row' value is same. 我想要列出“行”值相同的那些字典。
How can I do that using python? 如何使用python做到这一点?
Using itertools.groupby
: 使用
itertools.groupby
:
>>> import itertools
>>>
>>> l = [{'row':1}, {'row':2}, {'row':1}, {'row':3}, {'row':1}]
>>> row = lambda d: d['row']
>>> [list(grp) for _, grp in itertools.groupby(sorted(l, key=row), key=row)]
[[{'row': 1}, {'row': 1}, {'row': 1}], [{'row': 2}], [{'row': 3}]]
NOTE You need to pass sorted list to groupby
. 注意您需要将排序后的列表传递给
groupby
。
Alternative that does not require sorting, using collection.defaultdict
: 不需要排序的替代方法 ,使用
collection.defaultdict
:
>>> from collections import defaultdict
>>>
>>> l = [{'row':1}, {'row':2}, {'row':1}, {'row':3}, {'row':1}]
>>> ret = defaultdict(list)
>>> for d in l:
... ret[d['row']].append(d)
...
>>> ret.values() # list(d.values()) in Python 3.x
[[{'row': 1}, {'row': 1}, {'row': 1}], [{'row': 2}], [{'row': 3}]]
As shx2 commented, the alternative solution result will be arbitrary. 如shx2所述,替代解决方案的结果将是任意的。 If you want sorted result, use following form:
如果要排序结果,请使用以下形式:
>>> [ret[key] for key in sorted(ret)]
[[{'row': 1}, {'row': 1}, {'row': 1}], [{'row': 2}], [{'row': 3}]]
x_dict = {}
for d in l:
x_dict[d['row']] = x_dict.get(d['row'], []) + [d]
x = [x_dict[key] for key in sorted(x_dict.keys())]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.