चूंकि OrderedDict
में एक सूची (ऑर्डर किए गए तत्वों के साथ), और एक शब्दकोश (इंडेक्स के बजाए कुंजी के साथ) की विशेषताएं हैं, यह प्राकृतिक प्रतीत होता है कि आप चाबियों का उपयोग करके टुकड़ा कर सकते हैं।एक अजगर ऑर्डर्ड डिक्ट पर पूर्णांक की बजाय स्ट्रिंग कुंजियों के साथ आप कैसे टुकड़े कर सकते हैं?
>>> from collections import OrderedDict
>>> cities = OrderedDict((('san francisco', 650), ('new york', 212), ('shanghai', 8621), ('barcelona', 42423)))
>>> test['shanghai':] # I want all the cities from shanghai to the end of the list
TypeError: unhashable type
क्या इस बारे में दिलचस्प बात यह है कि यह त्रुटि OrderedDictionary.__getslice__
की वजह से लागू नहीं किया जा रहा है आप देखना चाहते हैं नहीं है। मैंने अपनी खुद की __getslice__
विधि OrderedDict
पर जोड़ने की कोशिश की, लेकिन मैं इस टाइप एरर समस्या में चल रहा हूं। ऐसा लगता है जैसे पाइथन कुछ प्रकार की प्रकार की जांच कर रहा है ताकि यह लागू किया जा सके कि स्लाइस कुंजियां केवल पूर्णांक हैं, इससे पहले कि वे __getslice__
फ़ंक्शन पर भी जाएं, कितना अवांछित!
>>> class BetterOrderedDict(OrderedDict):
def __getslice__(self, start=None, end=None, step=1):
return 'potato'
>>> test = BetterOrderedDict((('one', 1), ('two', 2), ('three', 3), ('four', 4)))
>>> print test[1:4]
'potato' # ok this makes sense so far
>>> test['one':'four']
TypeError: unhashable type # WTF, strings are hashable!
तो मेरे सवाल है, क्यों नहीं कर सकते मैं गैर पूर्णांक स्लाइस, प्रकार-चेकिंग की किस तरह भी मेरी __getslice__
समारोह तक पहुँचने से टुकड़ा कुंजी रोक रहा है को लागू किया जाता है, और मैं सी में मेरी BetterOrderedDict
को लागू करने से यह ओवरराइड कर सकते हैं बाइंडिंग के साथ?
आप कुंजी "चार" जब तक कुंजी "एक" से एक टुकड़ा बनाना चाहते हैं? –
यूप, क्योंकि उनके पास ऑर्डर है, यह ठीक होना चाहिए। –
लेकिन ... क्यों? उद्देश्य क्या है? –