[Tutor] Adding items to dictionaries

Jon Moore jonathan.r.moore at gmail.com
Thu Jan 26 14:53:02 CET 2006


Kent

Thanks again. I have a question (see below).

On 26/01/06, Kent Johnson <kent37 at tds.net> wrote:
>
> Jon Moore wrote:
> > Hi,
> >
> > I have the following dictionary:
> >
> > pairs = {"Jon Moore": ["Tony Moore", "Stanley Moore"],
> >          "Simon Nightingale": ["John Nightingale", "Alan Nightingale"],
> >          "David Willett": ["Bernard Willet", "Robert Willet"],
> >          "John Jackson": ["John Jackson", "Peter Jackson"],
> >          "James Southey": ["Richard Southey", "Paul Southey"],
> >          "Shaun Forsythe": ["William Forsythe", "Angus Forsythe"],
> >          "Daniel Geach": ["Mike Geach", "Andy Geach"]}
> >
> > Where the names represent a son, father and grandfather.
> >
> > I am trying to add a new term and related definitions to the dictionary,
> > but my code does not seem to work:
> >
> >         son = raw_input("Please enter the name of the Son: ")
> >         if son not in pairs:
> >             father = raw_input("Who is the Father?: ")
> >             grandfather = raw_input("What is the Grand Father?: ")
> >             pairs[son][0] = father
> >             pairs[son][1] = grandfather
> >             print "\n", son, ",", father, "and" ,grandfather, "have been
> > added."
> >         else:
> >             print "\nThat Son already exists!"
> >
> > The error I get is:
> >
> >     pairs[son][0] = father
> > KeyError: 'Steven Bates'
> >  >>>
> >
> > Where am I going wrong?
>
> The problem is, when you say
>    pairs[son][0] = father
>
> pairs[son] does not yet exist. This is on the left side of an
> assignment, but it is really an access to pair[son]. It is as if you had
> written
>    temp = pairs[son]
>    temp[0] = father
>
> You get a KeyError accessing pairs[son].
>
> The solution is to create a new list for the (father, grandfather) pair,
> and assign that to pairs[son]:
>
> ancestors = [father, grandfather]
> pairs[son] = ancestors
>
> You might want to rethink how you are storing the data. (father,
> grandfather) is actually a (son, father) pair so you might want to store
> them as another entry in the dictionary. Also two sons could have the
> same father and grandfather; with your scheme you will store the
> (father, grandfather) pair twice. In general this kind of duplication of
> data is better avoided.


Good point, but I have no idea how to do this! Could you show me?

You might also want to Google 'python genealogy'.
>
> Kent
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>



--
Best Regards

Jon Moore
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20060126/f5eb27ee/attachment.html 


More information about the Tutor mailing list