简体   繁体   English

将字典列表转换成字典列表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM