|
Revision 1980, 1.6 kB
(checked in by wrobe..@pld-linux.org, 1 year ago)
|
- support iteration over keys in appropriate order
- support swaping two elements
|
- Property svn:eol-style set to
native
- Property svn:keywords set to
Author Date Id Revision
|
| Line | |
|---|
| 1 |
|
|---|
| 2 |
class odict(dict): |
|---|
| 3 |
def __init__(self, dict=None): |
|---|
| 4 |
self._keys = [] |
|---|
| 5 |
dict.__init__(self, dict) |
|---|
| 6 |
|
|---|
| 7 |
def __delitem__(self, key): |
|---|
| 8 |
dict.__delitem__(self, key) |
|---|
| 9 |
self._keys.remove(key) |
|---|
| 10 |
|
|---|
| 11 |
def __setitem__(self, key, item): |
|---|
| 12 |
dict.__setitem__(self, key, item) |
|---|
| 13 |
if key not in self._keys: self._keys.append(key) |
|---|
| 14 |
|
|---|
| 15 |
def clear(self): |
|---|
| 16 |
dict.clear(self) |
|---|
| 17 |
self._keys = [] |
|---|
| 18 |
|
|---|
| 19 |
def copy(self): |
|---|
| 20 |
dict = dict.copy(self) |
|---|
| 21 |
dict._keys = self._keys[:] |
|---|
| 22 |
return dict |
|---|
| 23 |
|
|---|
| 24 |
def items(self): |
|---|
| 25 |
return zip(self._keys, self.values()) |
|---|
| 26 |
|
|---|
| 27 |
def keys(self): |
|---|
| 28 |
return self._keys |
|---|
| 29 |
|
|---|
| 30 |
def popitem(self): |
|---|
| 31 |
try: |
|---|
| 32 |
key = self._keys[-1] |
|---|
| 33 |
except IndexError: |
|---|
| 34 |
raise KeyError('dictionary is empty') |
|---|
| 35 |
|
|---|
| 36 |
val = self[key] |
|---|
| 37 |
del self[key] |
|---|
| 38 |
|
|---|
| 39 |
return (key, val) |
|---|
| 40 |
|
|---|
| 41 |
def setdefault(self, key, failobj=None): |
|---|
| 42 |
dict.setdefault(self, key, failobj) |
|---|
| 43 |
if key not in self._keys: self._keys.append(key) |
|---|
| 44 |
|
|---|
| 45 |
def update(self, dict): |
|---|
| 46 |
dict.update(self, dict) |
|---|
| 47 |
for key in dict.keys(): |
|---|
| 48 |
if key not in self._keys: self._keys.append(key) |
|---|
| 49 |
|
|---|
| 50 |
def values(self): |
|---|
| 51 |
return map(self.get, self._keys) |
|---|
| 52 |
|
|---|
| 53 |
|
|---|
| 54 |
def swap(self, k1, k2): |
|---|
| 55 |
""" |
|---|
| 56 |
Swap two elements using their keys. |
|---|
| 57 |
""" |
|---|
| 58 |
i1 = self._keys.index(k1) |
|---|
| 59 |
i2 = self._keys.index(k2) |
|---|
| 60 |
self._keys[i1], self._keys[i2] = self._keys[i2], self._keys[i1] |
|---|
| 61 |
|
|---|
| 62 |
|
|---|
| 63 |
def __iter__(self): |
|---|
| 64 |
for k in self._keys: |
|---|
| 65 |
yield k |
|---|