Mats Wichmann wrote: > 1. From an endpoint pair - say Buy/Levski and Sell/Olisar, you need the > common items. No point in looking further at items that can't both be > bought at the source and sold at the destination. Fortunately, Python > sets are really good at this, but first you have to extract only the > item names from your dictionary, since that comparison is based only on > good names. Something like this: > > def common(curr, other): > return set(curr.keys()).intersection(set(other.keys()))
As dict.keys() are very similar to a set you can also write curr.keys() & other.keys() or curr.keys() & other # if you don't care about symmetry ;) > So one way to tackle this might be to build a new dictionary containing > the items and their price difference. Given our previous idea of having > a set which contains the common items: > > prices = {k: Selling_Olisar[k] - Buying_Levski[k] for k in possibles} While a dict is almost always a good idea there is no need to build one if you're only interested in one entry. Instead feed the pairs directly to max(): selling = dict(Selling_Olisar) buying = dict(Buying_Levski) possibles = selling.keys() & buying if possibles: profit, good = max( (selling[k] - buying[k], k) for k in possibles ) if profit > 0: print("Best good", good, "wins", profit, "per unit") else: print("Found nothing profitable.") else: print("Found nothing that can be sold at your destination") _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor