[Tutor] 3 Dimensional Dictionaries

Dave Angel davea at davea.name
Sat Jul 20 13:14:29 CEST 2013


On 07/20/2013 06:17 AM, Sunil Tech wrote:
> Hi Everyone,
>
> I have a list of dictionaries like
>
> world =
> [{'continent':'Asia','continent_code':1,'ocean':'Pacific','country':'India','country_code':1,'state':'Kerala',
> 'state_pin':500001},
>   {'continent':'Asia','continent_code':1,'ocean':'Pacific','country':'India','country_code':1,'state':'Karnataka',
> 'state_pin':500002},
>   {'continent':'Africa','continent_code':2,'ocean':'Atlantic','country':'Egypt','country_code':2,'state':'East
> Egypt', 'state_pin':700001},
>   {'continent':'Africa','continent_code':2,'ocean':'Atlantic','country':'Egypt','country_code':2,'state':'West
> Egypt', 'state_pin':700002},
>   {'continent':'Africa','continent_code':2,'ocean':'Atlantic','country':'Egypt','country_code':2,'state':'North
> Egypt', 'state_pin':700003}]
>
>
> i am trying to to make it in this format
>
> world = [{'continent':'Asia', 'ocean':'Pacific',
>   'countries':[{'country':'India',
> 'states':[{'state':'Kerala', 'state_pin':500001},
>   {'state':'Karnataka', 'state_pin':500002}]
> }]
>   },
> {'continent':'Africa', 'ocean':'Atlantic',
>   'countries':[{'country':'Egypt',
> 'states':[{'state':'East Egypt', 'state_pin':700001},
>   {'state':'West Egypt', 'state_pin':700002},
> {'state':'North Egypt', 'state_pin':700003}]
>   }]
> }
> ]
>

Is this an assignment?  If so, it'd be best to tell us the exact 
assignment statement.  Is it to fit existing code that's designed to 
work with the second format?  Or is this a starting place, and subject 
to change?

In particular, I'd immediately define a namedtuple, and redefine the 
first list as a list of such named-tuples. Then I'd make an index to 
such tuples via your two-dimensional dict entries.

If you stick with your present plan, you should realize that there are 
assumptions built into it.  For example, the assumption that a continent 
has only one ocean -- that all countries within the continent have the 
same ocean.

Given all that, the simplest approach is to create defaultdict with the 
default being list.  Then each time you add a record to a dict, you ust 
append to the list;  if it's a new key, an empty list is created for you 
automatically.

both namedtuple and defaultdict are in the collections module.

http://docs.python.org/2/library/collections.html





-- 
DaveA



More information about the Tutor mailing list