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

如何修改这段Python代码以避免使用lambda函数?

移除lambda函数并保留按制造商排序的解决方案

有两种常用方法可以替换原代码中的lambda函数,同时完全保留原有按制造商名称字母序排序的功能:

方法一:自定义排序键函数

直接在fullInventory方法内定义一个普通函数,用来根据物品键获取对应的制造商名称,将其作为sorted的key参数。

修改后的完整代码:

import csv                         # 处理csv文件
from datetime import datetime      # 后续可用于获取时间

# 初始化报表生成类
class InventoryReports:
    def __init__(self, item_list):
        self.item_list = item_list      # 传入库存列表用于生成文件


    # Part a
    # 生成FullInventory.csv包含全部库存
    # 列顺序:ID、制造商名称、物品类型、价格、保修日期、是否损坏
    def fullInventory(self):
        with open('FullInventory.csv', 'w') as file:
            items = self.item_list
            
            # 自定义函数替代lambda,返回对应键的制造商名称
            def get_manufacturer(key):
                return items[key]['manufacturer']
            
            # 使用自定义函数作为排序依据
            keys = sorted(items.keys(), key=get_manufacturer)              
            for item in keys:
                id = item
                manufacture = items[item]['manufacturer']
                itemType = items[item]['item_type']
                price = items[item]['price']
                serviceDate = items[item]['service_date']
                damaged = items[item]['damaged']
                file.write('{},{},{},{},{},{}\n'.format(id, manufacture, itemType, price, serviceDate, damaged))

方法二:使用operator.itemgetter(更简洁)

通过operator模块的itemgetter工具,可以直接指定多层取值路径,避免手写lambda或自定义函数。

修改后的完整代码:

import csv                         # 处理csv文件
from datetime import datetime      # 后续可用于获取时间
from operator import itemgetter     # 导入itemgetter工具

# 初始化报表生成类
class InventoryReports:
    def __init__(self, item_list):
        self.item_list = item_list      # 传入库存列表用于生成文件


    # Part a
    # 生成FullInventory.csv包含全部库存
    # 列顺序:ID、制造商名称、物品类型、价格、保修日期、是否损坏
    def fullInventory(self):
        with open('FullInventory.csv', 'w') as file:
            items = self.item_list
            
            # 先对键值对按制造商排序,再提取键列表
            # itemgetter(1, 'manufacturer') 表示取每个键值对的第1个元素(物品字典),再取其'manufacturer'值
            sorted_items = sorted(items.items(), key=itemgetter(1, 'manufacturer'))
            keys = [item[0] for item in sorted_items]
            
            for item in keys:
                id = item
                manufacture = items[item]['manufacturer']
                itemType = items[item]['item_type']
                price = items[item]['price']
                serviceDate = items[item]['service_date']
                damaged = items[item]['damaged']
                file.write('{},{},{},{},{},{}\n'.format(id, manufacture, itemType, price, serviceDate, damaged))

说明

两种方法都能实现和原lambda函数完全一致的排序逻辑:

  • 方法一更直观,适合新手理解;
  • 方法二更简洁,是Python中处理此类排序场景的惯用写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:55:21