के बारे में "हैशबल" पूछना मुझे एक मनमाना निर्देश लेने और इसे एक नए नियम में कॉपी करने में दिलचस्पी है, इसे रास्ते में बदलना।पाइथन मूल्य
एक उत्परिवर्तन मैं करना चाहता हूं स्वैप कुंजी और मूल्य है। दुर्भाग्यवश, कुछ मूल्य अपने अधिकार में डिक्ट्स हैं। हालांकि, यह एक "unhashable प्रकार: 'dict'" त्रुटि उत्पन्न करता है। मुझे वास्तव में मूल्य को स्ट्रिंग करने और इसे कुंजी देने में कोई फर्क नहीं पड़ता। लेकिन, मैं इस तरह कुछ करने के लिए सक्षम होने के लिए करना चाहते हैं:
for key in olddict:
if hashable(olddict[key]):
newdict[olddict[key]] = key
else
newdict[str(olddict[key])] = key
वहाँ एक अपवाद नहीं फँसाने और "unhashable प्रकार" के लिए संदेश स्ट्रिंग को पार्स शामिल है कि यह करने के लिए एक साफ रास्ता नहीं है ? __hash__
के लिए दस्तावेज में
import collections
>>> isinstance({}, collections.Hashable)
False
>> isinstance(0, collections.Hashable)
True
यह दृष्टिकोण भी उल्लेख किया गया है संक्षेप में:
क्या यह काम करता है यदि एक टुपल में सूची/शब्दकोश होता है? –
नहीं, और यह ऐसा कुछ है जिसे आप केवल रन-टाइम पर निर्धारित कर सकते हैं क्योंकि सूची की सामग्री आम तौर पर अज्ञात होती है। 'हैश (([],))' टाइप टाइपर: अवांछनीय प्रकार: 'सूची'' – Syncopated
पायथन 2.7 'इंस्टेंसेंस (बाइटियर्रे ([0xa]), संग्रह। हैशबल का उपयोग करने वाले लोगों के लिए छोटी चेतावनी)'' सत्य 'लौटाता है लेकिन 'हैश (बाइटियर ([0xa]))' टाइप एरर: असहनीय प्रकार: 'bytearray' 'के साथ विफल रहता है। – RedX