Creating a dictionary from a .txt file
C.T.
swilks06 at gmail.com
Sun Mar 31 13:28:40 EDT 2013
On Sunday, March 31, 2013 12:38:56 PM UTC-4, Roy Smith wrote:
> In article <d15c39bc-5d2a-42c9-a76b-23768b61c391 at googlegroups.com>,
>
> "C.T." wrote:
>
>
>
> > Hello,
>
> >
>
> > I'm currently working on a homework problem that requires me to create a
>
> > dictionary from a .txt file that contains some of the worst cars ever made.
>
> > The file looks something like this:
>
> >
>
> > 1958 MGA Twin Cam
>
> > 1958 Zunndapp Janus
>
> > 1961 Amphicar
>
> > 1961 Corvair
>
> > 1966 Peel Trident
>
> > 1970 AMC Gremlin
>
> > 1970 Triumph Stag
>
> > 1971 Chrysler Imperial LeBaron Two-Door Hardtop
>
> >
>
> > The car manufacturer should be the key and a tuple containing the year and
>
> > the model should be the key's value. I tried the following to just get the
>
> > contents of the file into a list, but only the very last line in the txt file
>
> > is shown as a list with three elements (ie, ['2004', 'Chevy', 'SSR']) when I
>
> > print temp.
>
> >
>
> > d={}
>
> > car_file = open('worstcars.txt', 'r')
>
> > for line in car_file:
>
> > temp = line.split()
>
> > print (temp)
>
> > car_file.close()
>
>
>
> Yup. Because you run through the whole file, putting each line into
>
> temp, overwriting the previous temp value.
>
>
>
> > d=[]
>
> > car_file = open('worstcars.txt', 'r')
>
> > for line in car_file:
>
> > d.append(line.strip('\n'))
>
> > print (d)
>
> > car_file.close()
>
>
>
> You could do most of that with just:
>
>
>
> car_file = open('worstcars.txt', 'r')
>
> d = car_file.readlines()
>
>
>
> but there's no real reason to read the whole file into a list. What you
>
> probably want to do is something like:
>
>
>
> d = {}
>
> car_file = open('worstcars.txt', 'r')
>
> for line in car_file:
>
> year, manufacturer, model = parse_line(line)
>
> d[manufacturer] = (year, model)
>
>
>
> One comment about the above; it assumes that there's only a single entry
>
> for a given manufacturer in the file. If that's not true, the above
>
> code will only keep the last one. But let's assume it's true for the
>
> moment.
>
>
>
> Now, we're just down to writing parse_line(). This takes a string and
>
> breaks it up into 3 strings. I'm going to leave this as an exercise for
>
> you to work out. The complicated part is going to be figuring out some
>
> logic to deal with anything from multi-word model names ("Imperial
>
> LeBaron Two-Door Hardtop"), to lines like the Corvair where there is no
>
> manufacturer (or maybe there's no model?).
Roy, thank you so much! I'll do some more research to see how I can achieve this. Thank you!
More information about the Python-list
mailing list