อยากได้ดิกฯ แบบที่สามารถเติมข้อมูลได้ ทั้งแนวกว้างและแนวลึก และให้เป็นข้อมูลแบบ Stack ด้วย เราใช้วิธีการสร้างลิสต์ในดิกฯ โดย สร้างคลาสชื่อ ComplexDict ดังนี้
ComplexDict
class ComplexDict: def __init__(self, key): self.__list__ = [] key = str(key) self.__list__.append([key,[]]) def add_key(self, key): if not self.has_key(key): self.__list__.append([key,[]]) def __repr__(self): return repr(dict(self.__list__)) def __getitem__(self, key): _keys = self.keys() if key in _keys: index = _keys.index(key) return self.__list__[index][1] def __delitem__(self, key): if self.has_key(key): self[key] = []
ข้อมูลชนิดดิกชันนารี่ของไพธอน ดีหลายอย่าง แต่เสียตรงไม่สามารถทำงานแบบ Stack (First in, Last out) ได้
ลองเขียนคลาสง่าย ๆ สร้าง tuple ใน list เพื่อเลียนแบบดิกชันนารี่ที่สามารถเก็บข้อมูลเป็น stack ได้
tuple
list
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)
There are currently 0 users online.
Recent comments