Python:模仿groupby与list / dict理解的效果

时间:2018-06-02 16:03:36

标签: python list-comprehension

我需要转换一个dict列表:

products-2018

进入一个以original = [ {'type': 'a', 'length': 34, 'width': 74}, {'type': 'a', 'length': 15, 'width': 22}, {'type': 'b', 'length': 53, 'width': 54}, {'type': 'b', 'length': 11, 'width': 45}, ] 键为值的字典:

type

这可以通过expected = { 'a': [ {'type': 'a', 'length': 34, 'width': 74}, {'type': 'a', 'length': 15, 'width': 22}, ], 'b': [ {'type': 'b', 'length': 53, 'width': 54}, {'type': 'b', 'length': 11, 'width': 45}, ], } 或通过手动迭代列表来实现,但有没有办法只使用list / dict理解呢?

1 个答案:

答案 0 :(得分:1)

你可以这样做:

{t: [i for i in original if i['type'] == t] for t in {i['type'] for i in original}}

但它既难以阅读又具有 O(n²)的最坏情况运行时复杂性,其中 n 是列表中的项目数。在排序列表上使用itertools.groupby更快更容易阅读。