title: How to create nested dictionaries with duplicate keys in python
body: <p>I want to create data structure with nested dictionaries and duplicate keys. A detailed example is:</p>
  
  <pre><code>data['State1']['Landon']['abc Area'] = 'BOB'
  data['State1']['Landon']['abc Area'] = 'SAM'
  data['State1']['Landon']['xyz Area'] = 'John'
  data['State2']['New York']['hjk Area'] = 'Ricky'
  
  for z in data['State1'].keys() , 
  # I should get list ['Landon', 'Landon', 'Landon']
  for y in data['State1']['Landon'].keys() , 
  # I should get list ['abc Area', 'abc Area', 'xyz Area']
  </code></pre>
  
  <p>Currently to store the data I have used extra counter key  </p>
  
  <pre><code>data = Autovivification()  
  data[state][city][area][counter] = ID  
  </code></pre>
  
  <p>But while parsing total entries (duplicates as well) of City/Area, I have to use nested loops till counter key.</p>
  
  <pre><code>for city in data['State1'].keys():
    for area in data['State1'][city].keys():
      for counter in data['State1'][city][area].keys():
       for temp in data['State1'][city][area][counter].values():
           cityList.append(city)
           areaList.append(area)
  </code></pre>
  
  <p>For nested dictionaries, I found the following code posted by nosklo</p>
  
  <pre><code>class AutoVivification(dict):  
      """Implementation of perl's autovivification feature."""  
      def __getitem__(self, item):                
           try:  
              return dict.__getitem__(self, item)  
          except KeyError:   
              value = self[item] = type(self)()  
              return value
  </code></pre>
  
  <p>and for dictionary with duplicate keys, I found code posted by Scorpil         </p>
  
  <pre><code>class Dictlist(dict):  
      def __setitem__(self, key, value):  
          try:   
              self[key]   
          except KeyError:   
              super(Dictlist, self).__setitem__(key, [])   
          self[key].append(value)  
  </code></pre>
  
  <p>how to merge Autovivification and Duplicate class code? or is there any other pythonic way to handle such scenario?</p>