ข้อมูลชนิดดิกชันนารี่ของไพธอน ดีหลายอย่าง แต่เสียตรงไม่สามารถทำงานแบบ Stack (First in, Last out) ได้
ลองเขียนคลาสง่าย ๆ สร้าง tuple
ใน list
เพื่อเลียนแบบดิกชันนารี่ที่สามารถเก็บข้อมูลเป็น stack ได้
class StackDict: def __init__(self): self.data = [] self._keys = [] self._items = [] def __repr__(self): return repr(dict(self.data)) def __setitem__(self, key, item): if key in self._keys: index = self._keys.index(key) self.data[index] = (key, item) self._items[index] = item else: self.data.append((key, item)) self._keys.append(key) self._items.append(item) def __getitem__(self, key): index = self._keys.index(key) return self._items[index] def __delitem__(self, key): index = self._keys.index(key) self.data.remove((key,self._items[index])) self._keys.remove(key) self._items.remove(self._items[index]) def dict(self): return dict(self.data) def has_key(self, key): if key in self._keys: return True else: return False def keys(self): return self._keys def values(self): return self._items def items(self): return self.data def clear(self): self.__init__() def copy(self): import copy return copy.copy(self) def pop(self, key): item = self[key] del self[key] return item def getkey(self, index): return self._keys[index] def getvalue(self, index): return self._items[index]
เมธอดยังไม่ครบแบบดิกชันนารี่จริง ๆ เราเอาแค่เมธอดที่เรียกใช้บ่อย
ลองทดสอบดู
>>> d = StackDict() >>> d['x']=1 >>> d['a']=2 >>> d['1']=3 >>> d['b']=4 >>> d {'a': 2, 'x': 1, '1': 3, 'b': 4} >>> d.getkey(0) 'x' >>> d.data [('x', 1), ('a', 2), ('1', 3), ('b', 4)] >>> d.getvalue(0) 1 >>> d.getkey(-1) 'b' >>> d.getvalue(-1) 4