Hi,

On Tue, Mar 26, 2013 at 5:36 AM, Robert Sjoblom <robert.sjob...@gmail.com>wrote:

> Hi again, Tutor List.
>
> I am trying to figure out a problem I've run into. Let me first say
> that this is an assignment, so please don't give me any answers, but
> just nudge me in the general direction. So the task is this: from a
> text file, populate three different dictionaries with various
> information. The text file is structured like so:
> Georgie Porgie
> 87%
> $$$
> Canadian, Pub Food
>
> So name, rating, price range, and food offered. After food offered
> follows a blank line before the next restaurant is listed.
>
> The three dictionaries are:
> name_to_rating = {}
> price_to_names = {'$': [], '$$': [], '$$$': [], '$$$$': []}
> cuisine_to_names = {}
>
> Now I've poked at this for a while now, and one idea I had, which I
> worked on for quite a while, was that since the restaurants all start
> at index 0, 5, 10 and so on, I could structure a while loop like this:
> with open('textfile.txt') as mdf:
>   file_length = len(mdf.readlines())-1
>   mdf.seek(0)
>   data = mdf.readlines()
>

No need to calculate the file length.
Read yoiur data & ask python for the length of data.
You don't need nor want to read the file twice.


>   i = 0
>   while file_length > 0:
>     name_to_rating[data[i]] = int(data[i+1][:2])
>     price_to_names[data[i+2].strip()].append(data[i].strip())
>     # here's the cuisine_to_names part
>     i += 5
>     file_length -= 5
>

Another approach could be to process the file while reading it.
Since the format is fixed, you knoow exactly what information the  line
contains.


>
> And while this works, for the two first dictionaries,  it seems really
> cumbersome -- especially that second expression -- and very, very
> brittle. However, even if I was happy with that, I can't figure out
> what to do in the situation where:
> data[i+3] = 'Canadian, Pub Food' #should be two items, is currently a
> string.
> My problem is that I'm... stupid. I can split the entry into a list
> with two items, but even so I don't know how to add the key: value
> pair to the dictionary so that the value is a list, which I then later
> can append things to.
>

You might want to read up on the dict.get() method.


>
> I'm sorry, this sounds terribly confused, I know. I had another idea
> to feed each line to a function, because no restaurant name has a
> comma in it, and food offered always has a comma in it if the
> restaurant offers more than one kind. But again, this seems really
> brittle.

<snip>

>
> Much thanks in advance.
> --
> best regards,
> Robert S.
> _______________________________________________
> Tutor maillist  -  Tutor@python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to