En Tue, 13 Mar 2007 15:04:50 -0300, Drew <[EMAIL PROTECTED]> escribió:
> I'm currently writing a toy program as I learn python that acts as a > simple address book. I've run across a situation in my search function > where I want to iterate across a filtered list. My code is working > just fine, but I'm wondering if this is the most "elegant" way to do > this. Essentially, I'm searching the dict self.contacts for a key that > matches the pattern entered by the user. If so, I print the value > associated with that key. A pastie to the method is below, any help/ > advice is appreciated: > > http://pastie.caboo.se/46647 > > Side note: I'm learning python after ruby experience. In ruby I would > do something like: > > contacts.find_all{|name,contact| name =~ /search/}.each{|name,contact| > puts contact} > Just a few changes: def find(self, search): search_re = re.compile(search, re.IGNORECASE) for result in [self.contacts[name] for name in self.contacts if search_re.match(name)]: print result - you can iterate directly over a dictionary keys using: for key in dict - you can compile a regexp to re-use it in all loops; using re.IGNORECASE, you don't need to explicitely convert all to lowercase before comparing - if all you want to do is to print the results, you can even avoid the for loop: print '\n'.join('%s' % self.contacts[name] for name in self.contacts if search_re.match(name)) -- Gabriel Genellina -- http://mail.python.org/mailman/listinfo/python-list