如何从Python字典获取特定数据?并修正Weightcheck类方法问题
修复Weightcheck.bag_products的逻辑错误 + 字典数据获取指南
先搞定bag_products方法的问题——原代码有几个关键错误,我一步步拆解并修正:
原方法的核心问题
- 类方法定义错误:类的实例方法必须把
self作为第一个参数(如果用静态方法要加@staticmethod装饰器),原代码没加,调用时直接报错。 - 遍历对象完全错误:你传入的
product_list是字典,直接for product in product_list遍历的是字典的键(比如'Name'、'Price'),这些字符串根本没有weight属性,这是最致命的逻辑漏洞。 - 遍历中修改原数据:就算遍历的是正确对象,遍历过程中修改原列表/字典会导致遍历跳过元素,应该先收集要分离的元素,或者遍历副本。
- 字符串未转数值:字典里的
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
相关产品推荐
相关产品推荐

