اذهب إلى المحتوى
  • 0

استعمال set كمفتاح في قاموس في البايثون

Ali Ali38

السؤال

السلام عليكم، كنت أريد استعمال set كمفتاح في قاموس في البايثون و لكن عندما أكتب التالي:

s = set()
s.add(2)
s.add(3)
print(s)

d = dict()
d[s] = 1
print(d)

يظهر لي الخطأ التالي:

TypeError: unhashable type: 'set'

ما معنى الخطأ السابق و هل يمكن استعمال ال set بطريقة ما كمفتاح؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

إن القاموس في البايثون يعتمد على ما يسمى hash function للقيام بإيجاد سريع لمكان المفتاح، و هذه القيمة لا يجب أن تتغير من أجل الأداء و بسبب ذلك لا يمكن استعمال أي نمط قابل للتغيير mutable كمفتاح في البايثون.

يمكنك استعمال tuple بدلا من ذلك، و إن كنت تريد استعمال شيء مشابه لل set من أجل خواص معينة ضمنها فيمكن استعمال نسخة أخرى غير قابلة للتعديل و هي ال frozenset بالشكل التالي:

s = set()
s.add(2)
s.add(3)
print(s)

d = dict()
d[frozenset(s)] = 1
print(d)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

لا يمكننا استخدام set كمفتاح في قاموس أو كعنصر في مجموعة أخرى لأن الكائنات المحددة قابلة للتغيير وغير قابلة للتجزئة.

تتمثل إحدى طرق حل الخطأ في استخدام مجموعة التجميد. 

سأستخدم مثال من عندي بالإضافة الى المثال الذي شرحه الأخ حسان لتتضح لك الصورة :

my_set = {'hsoub', 'mostaql'}

#  باستخدام مجموعة كعنصر في مجموعة أخرى
# يظهر لنا هذا المشكل
#  TypeError: unhashable type: 'set'
another_set = {'ana', 'academy', my_set}

# باستخدام مجموعة كمفتاح في القاموس
# يظهر لنا هذا المشكل
#  TypeError: unhashable type: 'set'
my_dict = {my_set: 'hsoub'}

تتمثل إحدى طرق حل الخطأ في استخدام مجموعة التجميد "frozenset"

my_set = frozenset({'hsoub', 'mostaql'})


another_set = {'ana', 'academy', my_set}
print(another_set)  # => {'academy', frozenset({'mostaql', 'hsoub'}), 'ana'}

# التحقق مما إذا كان العنصر في المجموعة
print(frozenset({'mostaql', 'hsoub'}) in another_set)  # => True

# ---------------------------------------------------------------

my_dict = {my_set: 'khamsat'}
print(my_dict)  # => {'academy', frozenset({'ana', 'academy'}), 'mostaql'}


# الوصول إلى المفتاح في القاموس
print(my_dict[frozenset({'hsoub', 'mostaql'})])  # 👉️ khamsat

مجموعة frozenset هي نسخة غير قابلة للتغيير من كائن مجموعة Python ، لذا يمكن استخدامها كمفتاح في قاموس أو عنصر في مجموعة أخرى.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...