You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:18:24