[Tutor] Lists in lists
Brian van den Broek
broek at cc.umanitoba.ca
Sat Sep 16 20:30:57 CEST 2006
Morten Juhl Johansen said unto the world upon 16/09/06 08:29 AM:
> # Newbie warning
> I am making a timeline program. It is fairly simple.
> I base it on appending lists to a list.
> Ex.
> [[year1, "headline1", "event text1"], [year2, "headline2", "event text2"]]
>
> This seemed like a brilliant idea when I did it. It is easy to sort.
> Now, if I want to OUTPUT it, how do I indicate that I want to extract
> first entry in a list in a list? How do I print the separate entries?
>
> Yours,
> Morten
>
Hi Morten,
Andrei answered the question you asked; I'd like to make a suggestion
involving a bit of reworking.
You might think about structuring your timeline data as a dictionary,
rather than a list. So:
>>> timeline_data = {
... 800: ["Charlemagne Crowned Holy Roman Emperor", 'event_text'],
... 1066: ["Battle at Hastings", 'event_text']}
This makes it very easy to access a given year's data:
>>> timeline_data[800]
['Charlemagne Crowned Holy Roman Emperor', 'event_text']
and
>>> timeline_data[800][0]
'Charlemagne Crowned Holy Roman Emperor'
will get you the headline alone.
You expressed a liking for the lists as they are easy to sort. On
recent versions of python one can easily obtain a sorted list of
dictionary keys, too:
>>> d = {1:2, 3:4, 43545:32, -3434:42}
>>> d
{1: 2, 3: 4, -3434: 42, 43545: 32}
>>> sorted(d)
[-3434, 1, 3, 43545]
>>>
(Older versions of Python can do the same, but with a bit more
keyboard action.)
So, if you wanted to print the headlines in increasing year order:
>>> for year in sorted(timeline_data):
... print timeline_data[year][0]
...
Charlemagne Crowned Holy Roman Emperor
Battle at Hastings
>>>
You say you are new to Python. Well, it might not now be obvious why
dictionaries are especially useful, but they are *central* to the
pythonic approach. The sooner you become comfortable with them, the
better (IMHO).
Best wishes,
Brian vdB
More information about the Tutor
mailing list