from operator import attrgetter from pprint import pprint class Product(object): def __init__(self, number, name, supplier_name, supplier_id, quantity=0): self.number = number self.name = name self.supplier_name = supplier_name self.supplier_id = supplier_id self.quantity = quantity def __repr__(self): data = (self.number, self.name, self.supplier_name, self.supplier_id, self.quantity) return repr(data) def __lt__(self, other): return self.number < other.number def __eq__(self, other): return self.number == other.number def __hash__(self): return hash(self.number) by_number = attrgetter('number') by_name = attrgetter('name') by_supplier_name = attrgetter('supplier_name') by_supplier_id = attrgetter('supplier_id') by_quantity = attrgetter('quantity') stock_set = { Product(1004, 'Clapper', 'Joseph Enterprises', 888, 32), Product(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56), Product(1006, 'Veg-O-Matic', 'Ronco', 999, 9), Product(1003, 'Pocket Fisherman', 'Ronco', 999, 17), Product(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25), Product(1005, 'Phone Glove', 'Craig Ferguson', 777), Product(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44), } pprint(stock_set) pprint(sorted(stock_set, key=Product.by_name)) most = max(stock_set, key=Product.by_quantity) print(most.number) print() stock_dict = {prod.number:prod for prod in stock_set} pprint(stock_dict) pprint(sorted(stock_dict.values(), key=Product.by_name)) # pass dict values! most = max(stock_dict.values(), key=Product.by_quantity) # pass dict values! print(most.number) print(stock_dict[most.number])
Standard input is empty
{(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44),
(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56),
(1003, 'Pocket Fisherman', 'Ronco', 999, 17),
(1004, 'Clapper', 'Joseph Enterprises', 888, 32),
(1005, 'Phone Glove', 'Craig Ferguson', 777, 0),
(1006, 'Veg-O-Matic', 'Ronco', 999, 9),
(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25)}
[(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25),
(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56),
(1004, 'Clapper', 'Joseph Enterprises', 888, 32),
(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44),
(1005, 'Phone Glove', 'Craig Ferguson', 777, 0),
(1003, 'Pocket Fisherman', 'Ronco', 999, 17),
(1006, 'Veg-O-Matic', 'Ronco', 999, 9)]
1002
{1001: (1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44),
1002: (1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56),
1003: (1003, 'Pocket Fisherman', 'Ronco', 999, 17),
1004: (1004, 'Clapper', 'Joseph Enterprises', 888, 32),
1005: (1005, 'Phone Glove', 'Craig Ferguson', 777, 0),
1006: (1006, 'Veg-O-Matic', 'Ronco', 999, 9),
1007: (1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25)}
[(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25),
(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56),
(1004, 'Clapper', 'Joseph Enterprises', 888, 32),
(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44),
(1005, 'Phone Glove', 'Craig Ferguson', 777, 0),
(1003, 'Pocket Fisherman', 'Ronco', 999, 17),
(1006, 'Veg-O-Matic', 'Ronco', 999, 9)]
1002
(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56)