Ali Ali38 نشر 10 سبتمبر 2022 أرسل تقرير نشر 10 سبتمبر 2022 السلام عليكم، كنت أريد استعمال set كمفتاح في قاموس في البايثون و لكن عندما أكتب التالي: s = set() s.add(2) s.add(3) print(s) d = dict() d[s] = 1 print(d) يظهر لي الخطأ التالي: TypeError: unhashable type: 'set' ما معنى الخطأ السابق و هل يمكن استعمال ال set بطريقة ما كمفتاح؟ 1 اقتباس
1 Kais Hasan نشر 10 سبتمبر 2022 أرسل تقرير نشر 10 سبتمبر 2022 إن القاموس في البايثون يعتمد على ما يسمى hash function للقيام بإيجاد سريع لمكان المفتاح، و هذه القيمة لا يجب أن تتغير من أجل الأداء و بسبب ذلك لا يمكن استعمال أي نمط قابل للتغيير mutable كمفتاح في البايثون. يمكنك استعمال tuple بدلا من ذلك، و إن كنت تريد استعمال شيء مشابه لل set من أجل خواص معينة ضمنها فيمكن استعمال نسخة أخرى غير قابلة للتعديل و هي ال frozenset بالشكل التالي: s = set() s.add(2) s.add(3) print(s) d = dict() d[frozenset(s)] = 1 print(d) 1 اقتباس
0 Ahmed Sadek Elamine Touahria نشر 10 سبتمبر 2022 أرسل تقرير نشر 10 سبتمبر 2022 لا يمكننا استخدام 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 ، لذا يمكن استخدامها كمفتاح في قاموس أو عنصر في مجموعة أخرى. اقتباس
السؤال
Ali Ali38
السلام عليكم، كنت أريد استعمال set كمفتاح في قاموس في البايثون و لكن عندما أكتب التالي:
يظهر لي الخطأ التالي:
ما معنى الخطأ السابق و هل يمكن استعمال ال set بطريقة ما كمفتاح؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.