fork download
  1. from operator import attrgetter
  2. from pprint import pprint
  3.  
  4. class Product(object):
  5. def __init__(self, number, name, supplier_name, supplier_id, quantity=0):
  6. self.number = number
  7. self.name = name
  8. self.supplier_name = supplier_name
  9. self.supplier_id = supplier_id
  10. self.quantity = quantity
  11. def __repr__(self):
  12. data = (self.number, self.name, self.supplier_name,
  13. self.supplier_id, self.quantity)
  14. return repr(data)
  15. def __lt__(self, other):
  16. return self.number < other.number
  17. def __eq__(self, other):
  18. return self.number == other.number
  19. def __hash__(self):
  20. return hash(self.number)
  21. by_number = attrgetter('number')
  22. by_name = attrgetter('name')
  23. by_supplier_name = attrgetter('supplier_name')
  24. by_supplier_id = attrgetter('supplier_id')
  25. by_quantity = attrgetter('quantity')
  26.  
  27. stock_set = {
  28. Product(1004, 'Clapper', 'Joseph Enterprises', 888, 32),
  29. Product(1002, 'Chia Elmer Fudd', 'Joseph Enterprises', 888, 56),
  30. Product(1006, 'Veg-O-Matic', 'Ronco', 999, 9),
  31. Product(1003, 'Pocket Fisherman', 'Ronco', 999, 17),
  32. Product(1007, 'Bass-O-Matic', 'Dan Aykroyd', 666, 25),
  33. Product(1005, 'Phone Glove', 'Craig Ferguson', 777),
  34. Product(1001, 'Clapper Plus', 'Joseph Enterprises', 888, 44),
  35. }
  36. pprint(stock_set)
  37. pprint(sorted(stock_set, key=Product.by_name))
  38. most = max(stock_set, key=Product.by_quantity)
  39. print(most.number)
  40. print()
  41.  
  42. stock_dict = {prod.number:prod for prod in stock_set}
  43. pprint(stock_dict)
  44. pprint(sorted(stock_dict.values(), key=Product.by_name)) # pass dict values!
  45. most = max(stock_dict.values(), key=Product.by_quantity) # pass dict values!
  46. print(most.number)
  47. print(stock_dict[most.number])
  48.  
Success #stdin #stdout 0.04s 9696KB
stdin
Standard input is empty
stdout
{(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)