<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman,new york,times,serif;font-size:12pt"><div><span style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: times new roman,new york,times,serif;">I sometimes find it useful to store meta data on dictionary keys, like in the following example:</span><br><br>class Dict(dict):</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">  def __init__(self,*args,**kw):</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">    self.key_dict = {}</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">    super(Dict,self).__init__(*args,**kw)</span><br
 style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">  def __setitem__(self,k,v):</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">    self.key_dict[k] = k</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">    super(Dict,self).__setitem__(k,v)</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">  def get_key(self,key):</span><br style="font-family: courier,monaco,monospace,sans-serif;"><span style="font-family: courier,monaco,monospace,sans-serif;">    return self.key_dict[key]<br><br>class Str(str): pass<br><br>>>> friends = Dict()<br>>>> friends[Str('John')] =
 ['Bill','Jack','Isabelle']<br>>>> friends[Str('Jim')] = ['John','Bob']<br>>>> friends[Str('Isabelle')] = ['John','Christine','Anabelle']<br>>>> friends.get_key('John').hair_color = 'brown'<br>>>> friends.get_key('Jim').hair_color = 'red'<br>>>> friends.get_key('Isabelle').hair_color = 'green'<br>>>> friends<br>{'Jim': ['John', 'Bob'], 'John': ['Bill', 'Jack', 'Isabelle'], 'Isabelle': ['John', 'Christine', 'Anabelle']}<br>>>> friends.get_key('Isabelle').hair_color<br>'green'<br><br style="font-family: courier,monaco,monospace,sans-serif;"></span><span style="font-family: times new roman,new york,times,serif;">A more sensible, realistic example are attributes of graph nodes (e.g. color, shape, etc)  in the networkx package, where node objects are stored as keys of (nested) dictionaries.<br><br>Is there any particular reason why the built-in dictionary does not define a <span
 style="font-family: courier,monaco,monospace,sans-serif;">get_key()</span> method, but only <span style="font-family: courier,monaco,monospace,sans-serif;">keys()</span>, <span style="font-family: courier,monaco,monospace,sans-serif;">iterkeys()</span>, and <span style="font-family: courier,monaco,monospace,sans-serif;">has_key()</span> ?<br><br>Cheers,<br><br>Andreas<br></span></div></div></body></html>