Creating a dictionary from a .txt file
Roy Smith
roy at panix.com
Sun Mar 31 12:38:56 EDT 2013
In article <d15c39bc-5d2a-42c9-a76b-23768b61c391 at googlegroups.com>,
"C.T." <swilks06 at gmail.com> 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?).
More information about the Python-list
mailing list