[Tutor] Dictionaries and multiple keys/values

Alan Gauld alan.gauld at btinternet.com
Tue Mar 26 11:41:16 CET 2013


On 26/03/13 04:36, Robert Sjoblom wrote:

> Georgie Porgie
> 87%
> $$$
> Canadian, Pub Food
>

So a 5 line pattern with 4 data fields. The last one containing multiple 
comma separated values, potentially.


> The three dictionaries are:
> name_to_rating = {}
> price_to_names = {'$': [], '$$': [], '$$$': [], '$$$$': []}
> cuisine_to_names = {}

And the keys are all basic single data values


So far so good.

> 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:

Sounds way too complicated.

I'd just read the file in groups of 5 lines and process them as I went.
I'd also write a helper function to process each record.

In pseudo code

def storeRestaurant(mdr):
        name = mdr.readline()
        rating = mdr.readline()
        price = mdr.readline()
        cuisines= mdr.readline().split(',')
        # now assign values to dictionaries.

with open....as mdr
    while True:
       try: storeRestaurant(mdr)
       except end of file: pass


> 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.

I'm not sure why you think its brittle?
You need to code in error checking somewhere,
it might as well be hidden in a function.

> I guess we can't use objects (for some reason),

Technically you can but maybe assignment wise you can't...

> really convoluted expression? And how do I add more than one value to
> a key in a dictionary, if the values are added at different times and
> there's no list created in the dictionary to begin with?

You can create a list to begin with if you suspect you may need multiple 
values.... ie each time you add a new key create a list.
The get() method should help here.

> (I briefly though about initializing empty lists for each food type in
> the dictionary and go with my horrible expressions,

You can do the empty lists without the horrible expressions!
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/



More information about the Tutor mailing list