मैं शब्दकोशों की एक जोड़ी की तुलना करना चाहते हैं और 'अस्पष्ट' चल बिन्दु तुलना या बेहतर अभी तक numpy.allclose()
का उपयोग ऐसा करने के लिए इस्तेमाल करते हैं। हालांकि, डाइक्ट्स के लिए पाइथन में डिफ़ॉल्ट ==
या !=
का उपयोग करके ऐसा नहीं होता है।तुलना अजगर dicts शामिल
मैं अगर वहाँ एक रास्ता चल बिन्दु तुलना आपरेशन बदलने के लिए (शायद सुरक्षित सफाई के लिए एक संदर्भ प्रबंधक का उपयोग कर) था सोच रहा था।
मेरा मानना है कि यहां एक उदाहरण में मदद मिलेगी। मेरे पास एक गहरा घोंसला वाला नियम है जिसमें सभी प्रकार के मूल्य शामिल हैं। इनमें से कुछ मान फ़्लोटिंग पॉइंट मान हैं। मुझे पता है कि चल बिन्दु मूल्यों 'की तुलना' के लिए नुकसान की टन कर रहे हैं, आदि
d1 = {'a': {'b': 1.123456}}
d2 = {'a': {'b': 1.1234578}}
मैं !=
का उपयोग इन दो dicts तुलना करने के लिए और इसे वापस True
अंतर केवल एक के भीतर चल रहे हैं बिन्दु संख्या करना चाहते हैं कुछ सीमा उदाहरण के लिए, बंद (सुनिश्चित करें कि अभी तक सटीक मुझे अभी तक सुनिश्चित नहीं है) मानों को अलग मत मानें।
मुझे लगता है कि मैं खुद को डिक्ट्स के माध्यम से फिर से चला सकता हूं और मैन्युअल रूप से numpy.allclose()
फ्लोटिंग पॉइंट मानों के लिए उपयोग कर सकता हूं और अन्य सभी प्रकारों के लिए सामान्य समानता परीक्षण पर वापस आ सकता हूं। हालांकि, यह थोड़ा मुश्किल और त्रुटि प्रवण है। मुझे लगता है कि यह एक स्वीकार्य समाधान होगा, और मुझे ऐसा एक देखना अच्छा लगेगा। उम्मीद है कि हालांकि कुछ और सुरुचिपूर्ण है।
मेरे सिर में सुरुचिपूर्ण समाधान निम्नलिखित कुछ ऐसा दिखाई देगा। हालांकि, मैं अगर भी संभव है इस तरह कुछ नहीं जानता:
with hacked_float_compare:
result = d1 != d2
इस प्रकार, इस संदर्भ प्रबंधक के अंदर मैं चल बिन्दु तुलना (बस या तो अपने ही तुलना या numpy.allclose()
के साथ मानक float()
मूल्यों के लिए जगह दी जाएगी।
फिर, मुझे यकीन है कि यह संभव है बंदर float()
पैचिंग वास्तव में नहीं किया जा सकता क्योंकि के बाद से यह C
में लिखा गया है नहीं कर रहा हूँ। मैं भी अपने खुद के लिए dicts में हर चल बिन्दु मान बदलने के लिए होने से बचने के लिए करना चाहते हैं नाव वर्ग एक __eq__()
है। हो सकता है कि इस सबसे अच्छा w है अरे यद्यपि?
एक विकल्प फ्लोट के लिए एक रैपर बनाने और वहां '__eq__' ओवरराइड करना होगा। – NullUserException
लेकिन आपको अपने सभी फ्लोट्स को 'फ़ज़ीफ्लोएट (0.5)', आदि – alexis
के साथ बनाना होगा। मुझे यह दृष्टिकोण काम पता है, अगर मैं इससे बच सकता तो बस एक विशेष वस्तु/वर्ग का उपयोग नहीं करना चाहता था। मुझे वास्तव में इस उदाहरण में केवल 'अस्पष्ट' होने की तुलना की आवश्यकता है। यही कारण है कि मैं एक संदर्भ प्रबंधक का उपयोग करने की उम्मीद कर रहा था और सीमित समय के लिए बस एक अलग 'मोड' में जाना चाहता था। –