find a specified dictionary in a list
John Machin
sjmachin at lexicon.net
Fri Jul 22 08:57:41 EDT 2005
Odd-R. Hogstad wrote (in private e-mail, with scarcely private contents):
>In comp.lang.python, you 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, however I was hoping for something even simpler,
>as I am to use it in a <tal:block tal:define="d python:
>
>
Sorry, I don't know what <tal:block etc etc means.
And I don't know what "even simpler" could mean. Once you have the list
and have defined the function, you can simply deploy it wherever you
need the value.
current_oid = whatever
...
current_dict = oidfinder(current_oid, the_list)
>Is this the only way to do it? What if I know that the oid
>I am looking for is pressent?
>
>
>
>
Answering the 2nd question first: ignore the possiblility that the
oidfinder() will return None i.e. just chill out.
Other ways:
(a) use a list comprehension inline:
current_dict = [d for d in the_list if d['oid'] == current_oid][0]
# this is a tad ugly and will blow up if the sought oid is not present
-- but that can't happen, can it ? :-)
(b) preprocess the weird/baroque/byzantine list that you have got.
the_dict = {}
for d in the_list:
the_dict[d['oid']] = d
then you do this:
current_dict = the_dict[current_oid]
# Simpler than that it cannot be.
Now a couple of questions for you:
(1) Have you contemplated that an oid can appear more than once in the list?
(2) What in tarnation is an "oid"?????
Cheers,
John
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20050722/facb276b/attachment.html>
More information about the Python-list
mailing list