如何为字典数组添加item_cost字段(item_price与delivery_price的比值)
为字典数组添加新字段的实现方案
问题描述
给定如下字典数组:
[ {"id_1":1, "id_2":2, "item_price":50, "delivery_price":100}, {"id_1":1, "id_2":3, "item_price":200, "delivery_price":100}, {"id_1":1, "id_2":4, "item_price":60, "delivery_price":100} ]
需要为每个字典新增item_cost字段,值为item_price与delivery_price的比值,最终得到:
[ {"id_1":1, "id_2":2, "item_price":50, "delivery_price":100, "item_cost":0.5}, {"id_1":1, "id_2":3, "item_price":200, "delivery_price":100, "item_cost":2.0}, {"id_1":1, "id_2":4, "item_price":60, "delivery_price":100, "item_cost":0.6} ]
方法1:原地修改原数组
直接遍历数组,为每个字典添加新字段,适合不需要保留原数据的场景:
data = [ {"id_1":1, "id_2":2, "item_price":50, "delivery_price":100}, {"id_1":1, "id_2":3, "item_price":200, "delivery_price":100}, {"id_1":1, "id_2":4, "item_price":60, "delivery_price":100} ] for item in data: # 处理除数为0的情况,避免报错 item["item_cost"] = item["item_price"] / item["delivery_price"] if item["delivery_price"] != 0 else 0 print(data)
方法2:生成新数组(保留原数据)
如果需要保留原数组不被修改,可以生成包含新字段的新字典数组:
original_data = [ {"id_1":1, "id_2":2, "item_price":50, "delivery_price":100}, {"id_1":1, "id_2":3, "item_price":200, "delivery_price":100}, {"id_1":1, "id_2":4, "item_price":60, "delivery_price":100} ] # 列表推导式简化写法 new_data = [ {**item, "item_cost": item["item_price"] / item["delivery_price"] if item["delivery_price"] != 0 else 0} for item in original_data ] print(new_data) # 原数组不受影响 print(original_data)
若使用Python 3.9及以上版本,还可以用|运算符合并字典:
new_data = [ item | {"item_cost": item["item_price"] / item["delivery_price"] if item["delivery_price"] != 0 else 0} for item in original_data ]
注意事项
- 必须处理
delivery_price为0的情况,否则会触发除以0的运行时错误,上述代码中默认将这种情况的item_cost设为0,可根据实际需求调整逻辑。
内容的提问来源于stack exchange,提问作者I_B_O
相关产品推荐
相关产品推荐

