我有一些问题,所以我必须在列表中合并一个单独的dicts,并像下面预期的代码那样显示它
所以我有这些数据:
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'
}
]
我已经建立了一些方法来处理它的关系。像这样:
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
预期结果是:
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
}
]
}
}
];
但循环次数太多,不符合要求。我想要的是,在没有那么多for循环的情况下,用它的关系获取所有数据
这将在列表中迭代一次,但
stock_data
除外我能想到的唯一一件事,他们的意思是使用列表理解而不是for循环
您可能会发现一些关于该主题的有用链接:
如果由于某种原因,情况并非如此,则始终可以使用
map
函数。但我认为这通常会使代码比现在更不可读相关问题 更多 >
编程相关推荐