Python字典值转字典列表及Weightcheck类bag_products方法适配问题
解决字典转商品列表及Weightcheck类方法适配问题
我来帮你搞定这两个需求:把给定的结构化字典转换成单个商品的字典列表,同时实现符合逻辑的Weightcheck类bag_products方法,下面是具体的解决方案:
1. 将原始字典转换为商品字典列表
原始字典的每个键对应一组商品属性值,我们可以通过zip()函数把各属性的对应值打包,然后逐个生成单个商品的字典,同时注意把价格和重量转换为数值类型(方便后续的重量判断):
# 原始输入字典 raw_product_dict = { 'barcode': [123, 456], 'Name': ['Milk, 2 Litres', 'Bread'], 'Price': ['2', '3.5'], 'weight': ['2', '0.6'] } # 转换为商品字典列表 product_list = [] for barcode, name, price, weight in zip( raw_product_dict['barcode'], raw_product_dict['Name'], raw_product_dict['Price'], raw_product_dict['weight'] ): product_list.append({ 'barcode': barcode, 'name': name, 'price': float(price), 'weight': float(weight) }) print(product_list) # 输出结果: # [ # {'barcode': 123, 'name': 'Milk, 2 Litres', 'price': 2.0, 'weight': 2.0}, # {'barcode': 456, 'name': 'Bread', 'price': 3.5, 'weight': 0.6} # ]
这段代码逻辑很直观:通过zip()把每个商品的条码、名称、价格、重量一一对应,构造单个商品字典并加入列表,同时把字符串类型的价格和重量转成浮点数,为后续的重量判断做好准备。
2. 实现适配的Weightcheck类bag_products方法
我们需要实现一个方法,遍历传入的商品列表,把重量超过5.0的商品分到non_bag_items,其余放入bag_list,同时兼容[{name:'Milk', price:2.0, weight:2.0}, ...]格式的参数:
class Weightcheck: def bag_products(self, product_list): bag_list = [] non_bag_items = [] for product in product_list: # 兼容weight可能是字符串的情况,确保转换为数值类型 product_weight = float(product.get('weight', 0.0)) if product_weight > 5.0: non_bag_items.append(product) else: bag_list.append(product) return bag_list, non_bag_items # 测试方法功能 weight_checker = Weightcheck() # 测试兼容格式的参数 test_products = [ {'name':'Milk', 'price':2.0, 'weight':2.0}, {'name':'Watermelon', 'price':10.0, 'weight':6.5}, {'name':'Rice', 'price':5.0, 'weight':'4.8'} # 测试字符串类型的重量 ] bagged_items, non_bagged_items = weight_checker.bag_products(test_products) print("放入购物袋的商品:", bagged_items) print("无法放入购物袋的商品:", non_bagged_items) # 输出结果: # 放入购物袋的商品: [{'name': 'Milk', 'price': 2.0, 'weight': 2.0}, {'name': 'Rice', 'price': 5.0, 'weight': '4.8'}] # 无法放入购物袋的商品: [{'name': 'Watermelon', 'price': 10.0, 'weight': 6.5}]
这个方法的实用细节:
- 用
product.get('weight', 0.0)获取重量,避免因键名缺失导致报错 - 强制转换为浮点数,兼容传入的重量是字符串的情况
- 清晰地把商品分成两个列表并返回,方便后续业务处理
内容的提问来源于stack exchange,提问作者Nabin KC
相关产品推荐
相关产品推荐

