Python中如何用新列表重构含字典的商品列表?
重构饮品列表的实现方案
问题描述
现有一个饮品数据列表products,每个元素是包含name、price、stock字段的字典,结构示例如下:
products = [ { "name": "coke", "price": 3, "stock": 10 }, { "name": "bepis", "price": 2, "stock": 232 }, { "name": "fanta", "price": 2, "stock": 144 } ]
现在有三个关联的新列表:
names = ["mdew", "water", "tea", "tapwater"] # 饮品名称 prices = ["3", "10", "3", "40"] # 对应价格(字符串格式) stocks = ["10", "10", "10"] # 对应库存,最后一项tapwater无库存,因此少一个元素
需要基于这三个列表,生成和products结构完全一致的新数据列表。
实现思路
核心是将三个列表的对应元素配对,同时处理两个关键点:
- 库存列表长度不足,需要给最后一个元素补充合理的默认值(比如0,符合原始数据的数字类型)
- 将价格、库存的字符串转为整数,和原始结构保持一致
代码实现
names = ["mdew", "water", "tea", "tapwater"] prices = ["3", "10", "3", "40"] stocks = ["10", "10", "10"] # 补充库存列表,给tapwater设置默认库存0 stocks_extended = stocks + [0] # 遍历配对元素,生成目标列表 new_products = [] for name, price_str, stock in zip(names, prices, stocks_extended): new_product = { "name": name, "price": int(price_str), "stock": int(stock) if isinstance(stock, str) else stock } new_products.append(new_product) # 输出结果 print(new_products)
运行结果
生成的新列表结构与products完全匹配:
[ {'name': 'mdew', 'price': 3, 'stock': 10}, {'name': 'water', 'price': 10, 'stock': 10}, {'name': 'tea', 'price': 3, 'stock': 10}, {'name': 'tapwater', 'price': 40, 'stock': 0} ]
可选调整
如果业务中“无库存”需要用None表示,只需修改库存补充的代码:
stocks_extended = stocks + [None]
此时生成的tapwater库存为None,符合需求。
内容的提问来源于stack exchange,提问作者electricmanh
相关产品推荐
相关产品推荐

