find a specified dictionary in a list

Christopher Subich majromax at gmail.com
Fri Jul 22 09:21:02 EDT 2005



Odd-R. wrote:
> On 2005-07-22, John Machin <sjmachin at lexicon.net> wrote:
> > Odd-R. wrote:
> >> I have this list:
> >>
> >> [{'i': 'milk', 'oid': 1}, {'i': 'butter', 'oid': 2},{'i':'cake','oid':3}]
> >>
> >> All the dictionaries of this list are of the same form, and all the oids
> >> are distinct. If I have an oid and the list, how is the simplest way of
> >> getting the dictionary that holds this oid?
> >>
> >
> > Something like this:
> >
> > def oidfinder(an_oid, the_list):
> >      for d in the_list:
> > 	if d['oid'] == an_oid:
> >              return d
> >      return None
> >      # These are not the oids you are looking for.
>
> Thank you for your help, but I was hoping for an even simpler
> solution, as I am suppose to use it in a
> <tal:block tal:define="p python: sentence.
>
> Is there a simpler way of doing it? What if I assume that the
> oid I'm searching for really exists?

If you really, really, really don't care about proper error handling,
both of these expressions should work: (warning, untested since I'm at
work)
right_oid = [d for d in dictlist if d['oid']==the_oid][0]
right_oid = (d for d in dictlist if d['oid']==the_oid).next()

The last one more efficient as a generator expression, but requires
Python2.4.  Both of these error in Really Bad Ways (range error and
StopIteration exceptions, respectively) if the right dictionary isn't
in the list.




More information about the Python-list mailing list