How can I change this code to not use the lambda function?

Question:

import csv                         #working with csv files
from datetime import datetime      #this will allow accessing time for later use

#initialize class for every output
class InventoryReports:
    def __init__(self, item_list):
        self.item_list = item_list      #provide list to create new file


    #Part a
    #Create FullInventory.csv for entire inventory
    #Following order ID, manufacture name, item type, price, service date, damaged
    def fullInventory(self):
        with open('FullInventory.csv', 'w') as file:
            items = self.item_list
            keys = sorted(items.keys(), key=lambda x: items[x]['manufacturer'])              #sorted alphabetically by manufacture
            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))
Asked By: Will

||

Answers:

Here is a very verbose method, untested.

import csv                         #working with csv files
from datetime import datetime      #this will allow accessing time for later use

#initialize class for every output
class InventoryReports:
    def __init__(self, item_list):
        self.item_list = item_list      #provide list to create new file

    def fullInventory(self):
        with open('FullInventory.csv', 'w') as file:
            items = self.item_list     
            for i in range(len(items)):
                for j in range(len(items) - 1):
                    if items[j][2] > items[j+1][2]:
                        items[j], items[j+1] = items[j+1], items[j]
            for i in range(len(items)):
                for j in range(len(items) - 1):
                    if items[j][1] > items[j+1][1]:
                        items[j], items[j+1] = items[j+1], items[j]
            for i in range(len(items)):
                for j in range(len(items) - 1):
                    if items[j][3] > items[j+1][3]:
                        items[j], items[j+1] = items[j+1], items[j]
            # write header
            file.write('ID,Manufacturer,Item Type,Price,Service Date,Damagen')
            # write items
            for item in items:
                for i in range(len(item)):
                    if i == 0:
                        file.write(item[i])
                    else:
                        file.write(',' + item[i])
                file.write('n')
                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))
Answered By: Madison Courto

Try the following:

from operator import itemgetter


for item in sorted(items, key=itemgetter('manufacturer')):
    ....
Answered By: Charlie G
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.