i have some problem so i have to merge a separated dicts inside list, and display it like what expected code below
so i have this data :
product_data = [
{
'productId': 1000,
'productName': 'Product 1000'
},
{
'productId': 1001,
'productName': 'Product 1001'
}
]
stock_data = [
{
'productId': 1000,
'locationId': 1,
'stock': 21
},
{
'productId': 1000,
'locationId': 2,
'stock': 8
},
{
'productId': 1001,
'locationId': 1,
'stock': 4
},
{
'productId': 1001,
'locationId': 2,
'stock': 10
}
]
location_data = [
{
'locationId': 1,
'locationName': 'Location 1'
},
{
'locationId': 2,
'locationName': 'Location 2'
}
]
i have build some method to process it's relation. like this :
def location_detail(self, location_id):
location_detail = dict()
for data in self.location_data:
if data.get('locationId') == location_id:
location_detail = {
'locationName': data.get('locationName')
}
return location_detail
def total_stock(self, product_id):
total = 0
for data in self.stock_data:
if data.get('productId') == product_id:
total += data.get('stock')
return total
def stock_detail(self, product_id):
stock_detail = []
for data in self.stock_data:
if data.get('productId') == product_id:
stock_detail.append(
{
'stock': data.get('stock'),
'location':
self.location_detail(data.get('locationId')).get('locationName')
}
)
return stock_detail
def get(self):
result = []
for data in self.product_data:
product_id = data.get('productId')
product_data = {
'productName': data.get('productName'),
'stock': {
'total': self.total_stock(product_id),
'detail': self.stock_detail(product_id)
}
}
result.append(product_data)
return result
the expected result is:
const result = [
{
productName: 'Product 1000',
stock: {
total: 29,
detail: [
{
locationName: 'Location 1',
stock: 21
},
{
locationName: 'Location 2',
stock: 8
}
]
}
},
{
productName: 'Product 1001',
stock: {
total: 14,
detail: [
{
locationName: 'Location 1',
stock: 4
},
{
locationName: 'Location 2',
stock: 10
}
]
}
}
];
but it takes too many for loops, it didn't meet the requirements. what i want is, get all data with it's relation without having so many for loops.