Chris wrote: > For the first one you are parsing the entire file everytime you want > to lookup just one domain. If it is something reused several times > during your code execute you could think of rather storing it so it's > just a simple lookup away, for eg. > > _domain_dict = dict() > def generate_dict(input_file): > finput = open(input_file, 'rb') > global _domain_dict > for each_line in enumerate(finput): > line = each_line.strip().split(':') > if len(line)==2: _domain_dict[line[0]] = line[1] > > finput.close() > > def domain_lookup(domain_name): > global _domain_dict > try: > return _domain_dict[domain_name] > except KeyError:
What about this? _domain_dict = dict() def generate_dict(input_file): global _domain_dict # If it's already been run, do nothing. You might want to change # this. if _domain_dict: return fh = open(input_file, 'rb') try: for line in fh: line = line.strip().split(':', 1) if len(line) == 2: _domain_dict[line[0]] = line[1] finally: fh.close() def domain_lookup(domain_name): return _domain_dict.get(domain_name) I changed generate_dict to do nothing if it's already been run. (You might want it to run again with a fresh dict, or throw an error or something.) I removed enumerate() because it's unnecessary (and wrong -- you were trying to split a tuple of (index, line)). I also changed the split to only split once, like Duncan Booth suggested. The try-finally is to ensure that the file is closed if an exception is thrown for some reason. domain_lookup doesn't need to declare _domain_dict as global because it's not assigning to it. .get() returns None if the key doesn't exist, so now the function returns None. You might want to use a different value or throw an exception (use _domain_dict[domain_name] and not catch the KeyError if it doesn't exist, perhaps). Other than that, I just reformatted it and renamed variables, because I do that. :-P -- -- http://mail.python.org/mailman/listinfo/python-list