[Tutor] need a hint

Alan Gauld alan.gauld at btinternet.com
Wed Dec 4 12:03:51 CET 2013


On 04/12/13 03:51, Byron Ruffin wrote:
>
> is doing this.  Also, it seems to be referencing chars when variable
> lastName is an item in a list.
>

Thats because you are looping over the name.
Loops work on any iterable or sequence.
A string is a sequence of chars so you can loop over a
string as easily as over a list.

What you needed to do was lift Steve's code up a level
to your outer loop.

> Here is all my code:
>
> def createList2(filename):
>      List = []
>      senateInfo2 = {}
>
>      info = open( filename, "r" )
>      for line in info:

You could just do
        for line in open(filename):

>          dataOnLine = line.split( "\t" )
>          state = dataOnLine[ 0 ]
>          senator = dataOnLine[ 1 ]
>          nameSplit = dataOnLine[ 1 ].split(" ")
>
>          if len(nameSplit) == 3:
>              lastName = nameSplit[1]
>          elif len(nameSplit) == 4:
>              lastName = nameSplit[2]
>
>          already_seen = set()

You should have moved that up before the for line...

>          for name in lastName:

You don't need this loop, you have the name, you
don't want to read its characters.

>              if name in already_seen:
>                  print("Already seen", name)
>              else:
>                  already_seen.add(name)

So move this out a level and change name to lastname:

           if lastName in already_seen:
                print("Already seen", lastName)
           else:
                already_seen.add(lastName)

>          senateInfo2[lastName] = state

That then leads onto Oscar's suggestion to store a list of 
firstname/state tuples rather than just storing the last
state seen.

>      info.close()
>      return senateInfo2

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.flickr.com/photos/alangauldphotos



More information about the Tutor mailing list