[Tutor] Using re/search with dictionaries

Kirby Urner urnerk@qwest.net
Wed, 31 Oct 2001 09:24:56 -0800


Regular expressions search strings, not lists, so you
can't use d.keys() as an arg to re.search() -- would have
to do some conversion to/from to make this approach work.

But regular expressions might be overkill if you're just
wanting to find keys with embedded strings, nothing much
fancier.  Simpler string functions will do that job.

Defining dictionary d as per your setup script, the
function below lists all key/value pairs where the
passed pattern (e.g. "blue") is found in the key:

   >>> def getmatches(pattern, thedict):
            keys = [i for i in thedict.keys() if i.find(pattern)>=0]
            for k in keys:
               print "%s = %s" % (k,thedict[k])


   >>> getmatches("blue",d)
   blue-003 = ['blueberry muffins']
   blue-002 = ['blueberry cobbler']
   blue-001 = ['blueberry pie']
   blueberry = ['muffins']
   bluebird = ['feathered friend']

You could modify the above to work with regular expressions,
but it'd search each key, one at a time.  Again, if simple
string functions will do the job, they're faster.

Kirby

At 10:04 AM 10/31/2001 -0700, Jackson wrote:
>Greetings --
>How do I search dict keys? and return the records that go along with them? 
>It seems as if it should be something along this line:
>
># we're looking for keys/records with blue* in them.
>m=rd.search("\w[blue]+",d.keys())
>if m: print repr(m.group(0))
>    and the output should be:
>
>[blue-001"]=["blueberry pie"]
>["blue-002"]=["blueberry cobbler"]
>["blue-003"]=["blueberry muffins"]
>...
>....
>
>
>Thanks for you time
>David Jackson