I did not understand what a tuple was. So it was very hard for me to understand what a namedtuple was and follow the code. Then I looked up the word at dictionary.com and got this: http://dictionary.reference.com/browse/tuple
tuple: computing a row of values in a relational database Now I understand a little better what a tuple is and can follow the code better. A namedtuple seems like a dictionary type. I'll need to read up on the difference between the two. Thanks again. On Oct 15, 12:47 am, Chris Rebert <c...@rebertia.com> wrote: > On Fri, Oct 14, 2011 at 7:59 PM,MrPink<tdsimp...@gmail.com> wrote: > > This is what I have been able to accomplish: > > > def isInt(s): > > try: > > i = int(s) > > return True > > except ValueError: > > return False > > > f = open("powerball.txt", "r") > > lines = f.readlines() > > f.close() > > > dDrawings = {} > > for line in lines: > > if isInt(line[0]): > > t = line.split() > > d = t[0] > > month,day,year = t[0].split("/") > > i = int(year + month + day) > > wb = t[1:6] > > wb.sort() > > pb = t[6] > > r = {'d':d,'wb':wb,'pb':pb} > > dDrawings[i] = r > > > The dictionary dDrawings contains records like this: > > dDrawings[19971101] > > {'pb': '20', 'd': '11/01/1997', 'wb': ['22', '25', '28', '33', '37']} > > > I am now able to search for ticket in a date range. > > keys = dDrawings.keys() > > b = [key for key in keys if 20110909 <= key <= 20111212] > > > How would I search for matching wb (White Balls) in the drawings? > > > Is there a better way to organize the data so that it will be flexible > > enough for different types of searches? > > Search by date range, search by pb, search by wb matches, etc. > > > I hope this all makes sense. > > from datetime import datetime > from collections import namedtuple, defaultdict > # for efficient searching by date: import bisect > > DATE_FORMAT = "%m/%d/%Y" > Ticket = namedtuple('Ticket', "white_balls powerball date".split()) > > powerball2ticket = defaultdict(set) > whiteball2ticket = defaultdict(set) > tickets_by_date = [] > > with open("powerball.txt", "r") as f: > for line in f: > if not line[0].isdigit(): > # what are these other lines anyway? > continue # skip such lines > > fields = line.split() > > date = datetime.strptime(fields[0], DATE_FORMAT).date() > white_balls = frozenset(int(num_str) for num_str in fields[1:6]) > powerball = int(fields[6]) > ticket = Ticket(white_balls, powerball, date) > > powerball2ticket[powerball].add(ticket) > for ball in white_balls: > whiteball2ticket[ball].add(ticket) > tickets_by_date.append(ticket) > > tickets_by_date.sort(key=lambda ticket: ticket.date) > > print(powerball2ticket[7]) # all tickets with a 7 powerball > print(whiteball2ticket[3]) # all tickets with a non-power 3 ball > > Cheers, > Chris > --http://rebertia.com -- http://mail.python.org/mailman/listinfo/python-list