Matt Nordhoff <[EMAIL PROTECTED]> wrote: > Using two list comprehensions mean you construct two lists, which sucks > if it's a large file.
Only if it is very large. You aren't duplicating the data except for entries with whitespace round them. If there isn't a lot of whitespace then the extra overhead for duplicating the list is unlikely to be significant. > > Also, you could pass the list comprehension (or better yet a generator > expression) directly to dict() without saving it to a variable: > > with open('/etc/virtual/domainowners','r') as fh: > return dict(line.strip().split(':', 1) for line in fh) > > (Argh, that doesn't .strip() the key and value, which means it won't > work, but it's so simple and elegant and I'm tired enough that I'm not > going to add that. :-P Just use another genexp. Makes for a line > complicated enough that it could be turned into a for loop, though.) It isn't hard to convert my lists to generators keeping the structure exactly the same (and fixing the typo): def loaddomainowners(domain): with open('/etc/virtual/domainowners','r') as infile: pairs = (line.split(':',1) for line in infile if ':' in line) pairs = ((domain.strip(), owner.strip()) for (domain,owner) in pairs) return dict(pairs) -- http://mail.python.org/mailman/listinfo/python-list