79.2k views
5 votes
In a dictionary whose keys are the warehouses: associated with each warehouse is an inner dictionary whose keys are the stocked products (and whose associated values are the inventory of that product in the warehouse). The inventory must always be a non-negative value; an inventory of 0 is legal. For example, a simple/small database might be.

db = {'Irvine' : {'brush': 3, 'comb': 2, 'wallet': 2}, 'Newport': {'comb': 7, 'stapler': 0},
'Tustin' : {'keychain': 3, 'pencil': 4, 'wallet': 3}}

This data structure means that

The Irvine warehouse stocks 3 brushes, 2 combs, and 2 wallets.

The Newport warehouse stocks 7 combs, and 0 staplers.

The Tustin warehouse stocks 3 keychains, 4 pencils, and 3 wallets.

(c) The by_store_inventory2 function returns a list of 2-tuples (str,int) (warehouse names and inventory), sorted ascending by which warehouses have the largest inventory (summed over all the products). If two warehouses store the same inventory, they should appear in ascending order of warehouse name: for the db dictionary above the result is [('Irvine', 7), ('Newport', 7), ('Tustin', 10)].

1 Answer

4 votes

Answer:

Here is the completed code for this problem. Comments are included, go through it, learn how things work.

Note: Please maintain proper code spacing (indentation), just copy the code part and paste it in your compiler/IDE directly, no modifications required.

Step-by-step explanation:

#code

#required method taking a db as parameter

def by_product_inventory_count(db):

#one line statement, which initially creates a list of all keys (warehouse names)

#from the dict using a list comprehension, then sorts it by length of the inner dict

#represented by each warehouse name, and if the length is same, sorts by key itself

#(alphabetically), and returns this sorted list

return sorted([key for key in db],key=lambda x:(len(db[x]),x))

#creating a db and testing the method

db={'Irvine' : {'brush': 3, 'comb': 2, 'wallet': 2}, 'Newport': {'comb': 7, 'stapler': 0},

'Tustin' : {'keychain': 3, 'pencil': 4, 'wallet': 3}}

sorted_warehouse_names=by_product_inventory_count(db)

print(sorted_warehouse_names)

#OUTPUT

['Newport', 'Irvine', 'Tustin']

User Florian Redinger
by
5.0k points