Lists of lists and tuples, and finding things within them

attn.steven.kuo at gmail.com attn.steven.kuo at gmail.com
Thu Nov 9 15:27:10 EST 2006


Daniel Nogradi wrote:
> > I have a program that keeps some of its data in a list of tuples.
> > Sometimes, I want to be able to find that data out of the list.  Here is
> > the list in question:
> >
> > [('password01', 'unk'), ('host', 'dragonstone.org'), ('port', '1234'),
> > ('character01', 'Thessalus')]
> >
> > For a regular list, I could do something like x.index('host') and find
> > the index of it, but I don't know how to do this for a tuple where the
> > data item isn't known in advance.  For example, I want to get the "host"
> > entry from the list above; but I can only retrieve it if I know what it
> > contains (e.g., x.index(('host', 'dragonstone.org'))).
> >
> > Is there a better way to do this than a construct similar the following?
> >
> > for key, value in x:
> >     if key == 'host':
> >         print value
> >
>
> If I were you I would use a dictionary for such a thing:
>

(snipped)


The sequence of tuples may have repeated "keys"; if
that's the case, then you may use a filter/iterator instead.
Using a dictionary would otherwise cause you to lose
"values":

import itertools

mytuple = (('foo', 'bar'), ('foo', 'foobar'), ('baz', 'qux'))

it = itertools.ifilter(lambda t : t[0] == 'foo', mytuple)
 
for t in it:
    print t


-- 
Hope this helps,
Steven




More information about the Python-list mailing list