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

如何从Python字典获取特定数据?并修正Weightcheck类方法问题

修复Weightcheck.bag_products的逻辑错误 + 字典数据获取指南

先搞定bag_products方法的问题——原代码有几个关键错误,我一步步拆解并修正:

原方法的核心问题

  1. 类方法定义错误:类的实例方法必须把self作为第一个参数(如果用静态方法要加@staticmethod装饰器),原代码没加,调用时直接报错。
  2. 遍历对象完全错误:你传入的product_list是字典,直接for product in product_list遍历的是字典的键(比如'Name'、'Price'),这些字符串根本没有weight属性,这是最致命的逻辑漏洞。
  3. 遍历中修改原数据:就算遍历的是正确对象,遍历过程中修改原列表/字典会导致遍历跳过元素,应该先收集要分离的元素,或者遍历副本。
  4. 字符串未转数值:字典里的weight值是字符串,直接和5.0比较会触发类型错误,得先转成float类型。

修正后的代码

先把字典转换成结构化的产品列表(每个产品是包含所有属性的字典),再做重量筛选:

product_list = {
    'Name': ['Milk, 2 Litres', 'Bread', 'Sugar', 'Apple'],
    'Price': ['2.0', '3.5', '3.0', '4.5'],
    'weight': ['2', '0.6', '2.8', '4.2']
}

class Weightcheck:
    def bag_products(self, product_dict):
        # 先把字典转换成易操作的产品列表
        products = []
        for name, price, weight in zip(product_dict['Name'], product_dict['Price'], product_dict['weight']):
            products.append({
                'name': name,
                'price': float(price),
                'weight': float(weight)
            })
        
        bag_list = []
        non_bag_items = []
        MAX_BAG_WEIGHT = 5.0
        
        # 遍历筛选重量符合要求的产品
        for product in products:
            if product['weight'] > MAX_BAG_WEIGHT:
                non_bag_items.append(product)
            else:
                bag_list.append(product)
        
        return bag_list, non_bag_items

# 使用示例
checker = Weightcheck()
bagged, non_bagged = checker.bag_products(product_list)
print("可以装袋的产品:", bagged)
print("不能装袋的产品:", non_bagged)

如果不想实例化类,改成静态方法版本:

class Weightcheck:
    @staticmethod
    def bag_products(product_dict):
        # 同上的转换和筛选逻辑...

如何从Python字典中获取特定数据

针对你的product_list字典,我举几个常用场景:

1. 获取所有产品名称

all_names = product_list['Name']
# 输出: ['Milk, 2 Litres', 'Bread', 'Sugar', 'Apple']

2. 获取某个产品的价格(比如第一个产品)

first_product_price = product_list['Price'][0]
# 输出: '2.0',转成数值用:float(first_product_price)

3. 获取重量小于3的产品名称

light_products = []
for name, weight in zip(product_list['Name'], product_list['weight']):
    if float(weight) < 3:
        light_products.append(name)
# 输出: ['Bread', 'Sugar']

4. 获取指定名称产品的重量(比如找'Bread'的重量)

target_name = 'Bread'
index = product_list['Name'].index(target_name)
bread_weight = float(product_list['weight'][index])
# 输出: 0.6

5. 转换成更易查询的产品映射表

product_map = {}
for name, price, weight in zip(product_list['Name'], product_list['Price'], product_list['weight']):
    product_map[name] = {
        'price': float(price),
        'weight': float(weight)
    }
# 之后直接通过名称查询:product_map['Apple']['weight'] → 4.2

内容的提问来源于stack exchange,提问作者NICK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:57