code_junkie

How do you retrieve items from a dictionary in the order that they're inserted?

Nov 10th, 2011
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.05 KB | None | 0 0
  1. class ordered_dict(dict):
  2. def __init__(self, *args, **kwargs):
  3. dict.__init__(self, *args, **kwargs)
  4. self._order = self.keys()
  5.  
  6. def __setitem__(self, key, value):
  7. dict.__setitem__(self, key, value)
  8. if key in self._order:
  9. self._order.remove(key)
  10. self._order.append(key)
  11.  
  12. def __delitem__(self, key):
  13. dict.__delitem__(self, key)
  14. self._order.remove(key)
  15.  
  16. def order(self):
  17. return self._order[:]
  18.  
  19. def ordered_items(self):
  20. return [(key,self[key]) for key in self._order]
  21.  
  22.  
  23. od = ordered_dict()
  24. od["hello"] = "world"
  25. od["goodbye"] = "cruel world"
  26. print od.order() # prints ['hello', 'goodbye']
  27.  
  28. del od["hello"]
  29. od["monty"] = "python"
  30. print od.order() # prints ['goodbye', 'monty']
  31.  
  32. od["hello"] = "kitty"
  33. print od.order() # prints ['goodbye', 'monty', 'hello']
  34.  
  35. print od.ordered_items()
  36. # prints [('goodbye','cruel world'), ('monty','python'), ('hello','kitty')]
  37.  
  38. my_dict={}
  39. my_dict["foo"]="bar"
  40.  
  41. my_dict=odict.odict()
  42. my_dict["foo"]="bar"
Add Comment
Please, Sign In to add comment