我有一个python字典,例如
my_list = [{'orderproduct_id': 76, 'orderproduct_quantity': '500', 'orderbatch_id': 'FOX19022019-2'},
{'orderproduct_id': 76, 'orderproduct_quantity': '500', 'orderbatch_id': 'FOX19022019-1'},
{'orderproduct_id': 77, 'orderproduct_quantity': '100', 'orderbatch_id': 'FOX19022019-1'}]
我想要输出
my_list = [{'orderproduct_id': 76,
'batches': [{'orderproduct_quantity': '500', 'orderbatch_id': 'FOX19022019-2'},
{'orderproduct_quantity': '500', 'orderbatch_id': 'FOX19022019-1'}
]
},
{'orderproduct_id': 77,
'batches': [{'orderproduct_quantity': '100', 'orderbatch_id': 'FOX19022019-1'}
]
}]
我正在Django视图中使用它,因此,如果任何Django函数或python概念可以工作,请告诉我。 谢谢。
答案 0 :(得分:2)
尝试以下类似方法!首先,创建字典以将orderproduct_id
保留为关键字,并将每个orderproduct_quantity
和orderbatch_id
(都作为字典添加到列表)。然后,只需使用压缩列表将字典转换为字典列表即可,其中键将是orderproduct_id
,而值将是{{1} }。
batches
答案 1 :(得分:2)
您可以使用itertools:
from itertools import groupby
new_list = [ {'orderproduct_id': k, 'batches': list(i)}
for k, i in groupby(my_list, lambda x: x['orderproduct_id']) ]
已编辑
编辑为:
groupby
。新代码:
from itertools import groupby
my_key = lambda x: x['orderproduct_id']
[ {'orderproduct_id': k,
'batches': [ d for d in i if d.pop('orderproduct_id') ]}
for k, i in groupby( sorted(my_list,key=my_key), my_key ) ]
说明
您正在按orderproduct_id
分组。然后,自然的方法是使用groupby
函数。另一位开发人员几秒钟后看到groupby
时,他/她就知道代码正在对元素进行分组。
此外,我的方法使用list comprehension,因为您是从另一个可迭代对象创建新的列表/字典。
答案 2 :(得分:-1)
您可以通过orderproduct_id
来分隔项目:
aggregator = defaultdict(list)
for item in my_list:
aggregator[item.pop('orderproduct_id')].append(item)
然后从聚合的字典项中列出新列表:
new_list = []
for key, value in aggregator.items():
new_list.append({
'orderproduct_id': key,
'batches': value
})