我需要转换一个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理解呢?
答案 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
更快更容易阅读。