Creating a dictionary from a .txt file

C.T. swilks06 at gmail.com
Sun Mar 31 19:28:40 CEST 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