python: ทำ StackDict
Submitted by wd on Mon, 2007-04-02 14:41
Topic:
ข้อมูลชนิดดิกชันนารี่ของไพธอน ดีหลายอย่าง แต่เสียตรงไม่สามารถทำงานแบบ 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
- Printer-friendly version
- Log in or register to post comments
- 3689 reads







Recent comments