تنفيذ جدول تجزئة فعال ثنائي الاتجاه
يسمح جدول التجزئة ثنائي الاتجاه بإجراء عمليات البحث من المفتاح إلى القيمة ومن القيمة إلى المفتاح. على الرغم من أن بنية بيانات الإملاء المضمنة في لغة بايثون تتفوق في عمليات البحث من مفتاح إلى قيمة، إلا أنها لا تقدم عمليات استرجاع فعالة من قيمة إلى مفتاح.
الطريقة الفعالة لتنفيذ جدول التجزئة ثنائي الاتجاه هي استخدام فئة الذي يمتد الإملاء القياسي. تحتفظ هذه الفئة، المسماة bidict، بدليل عكسي يتم تحديثه تلقائيًا مع أي تعديلات على الإملاء العادي.
تنفيذ الكود:
class bidict(dict):
def __init__(self, *args, **kwargs):
super(bidict, self).__init__(*args, **kwargs)
self.inverse = {}
for key, value in self.items():
self.inverse.setdefault(value, []).append(key)
def __setitem__(self, key, value):
if key in self:
self.inverse[self[key]].remove(key)
super(bidict, self).__setitem__(key, value)
self.inverse.setdefault(value, []).append(key)
def __delitem__(self, key):
self.inverse.setdefault(self[key], []).remove(key)
if self[key] in self.inverse and not self.inverse[self[key]]:
del self.inverse[self[key]]
super(bidict, self).__delitem__(key)
الميزات الرئيسية:
مثال الاستخدام:
bd = bidict({'a': 1, 'b': 2 )) طباعة (دينار بحريني) # {'أ': 1، 'ب': 2} طباعة (bd.inverse) # {1: ['a']، 2: ['b']} bd['c'] = 1 # الآن هناك مفتاحان لهما نفس القيمة (= 1) طباعة (دينار بحريني) # {'أ': 1، 'ج': 1، 'ب': 2} print(bd.inverse) # {1: ['a', 'c'], 2: ['b']} ديل دينار بحريني ['ج'] طباعة (دينار بحريني) # {'أ': 1، 'ب': 2} طباعة (bd.inverse) # {1: ['a']، 2: ['b']} ديل دينار بحريني['أ'] طباعة (دينار بحريني) # {'ب': 2} طباعة (bd.inverse) # {2: ['b']} دينار بحريني ['ب'] = 3 طباعة (دينار بحريني) # {'ب': 3} طباعة(bd.inverse) # {2: []، 3: ['b']}تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3