पायथन 2.x दोनों चाबियों को दोबारा जोड़कर परीक्षण करता है, यह जांचने के प्रयोजनों के लिए दो कुंजी की तुलना करता है कि कोई कुंजी पहले से मौजूद है, किसी मान को एक्सेस कर रहा है या मूल्य को ओवरराइट कर रहा है। एक कुंजी यूनिकोड के रूप में संग्रहीत की जा सकती है, लेकिन दो अलग-अलग यूनिकोड तारों को दोनों को चाबियाँ के रूप में उपयोग नहीं किया जा सकता है यदि वे समान बाइटरीज़ को कम करते हैं।
In []: d = {'a': 1, u'a': 2}
In []: d
Out[]: {'a': 2}
आप कुछ अर्थों में यूनिकोड कुंजी का उपयोग कर सकते हैं।
यूनिकोड कुंजी यूनिकोड में रखा जाता है:
In []: d2[u'a']
Out[]: 1
In []: d2['a']
Out[]: 1
कुंजी या का उपयोग करना:
In []: d2 = {u'a': 1}
In []: d2
Out[]: {u'a': 1}
आप किसी भी यूनिकोड स्ट्रिंग या bytestring कि "बराबर है" मौजूदा कुंजी के साथ मूल्य तक पहुँच सकते हैं कोई भी नया मूल्य लिखने के लिए "बराबर" कुछ भी सफल होगा और मौजूदा कुंजी को बनाए रखेगा:
In []: d2['a'] = 5
In []: d2
Out[]: {u'a': 5}
क्योंकि मौजूदा कुंजी में 'a'
की तुलना True
थी, उस मौजूदा यूनिकोड कुंजी से संबंधित मान 5
के साथ प्रतिस्थापित किया गया था। प्रारंभिक उदाहरण में, मैं को d
के लिए शाब्दिक में प्रदान की गई दूसरी कुंजीसचमुच पहले निर्दिष्ट कुंजी पर तुलना करता है, इसलिए बाइटस्ट्रिंग 'a'
को कुंजी के रूप में बनाए रखा गया था लेकिन मान 2
के साथ ओवरराइट किया गया था।
स्रोत
2015-12-30 11:04:02
मुझे इसी तरह की समस्याएं थीं जब मैंने कुछ "स्ट्रिंग" के अलग-अलग एन्कोडेड संस्करणों के साथ कुछ शब्दकोश बनाए और पूछे। यह देखने के लिए कुछ है। उपयोगी तरीके 'str.encode' और' str.decode' स्ट्रिंग विधियां हैं। और, ज़ाहिर है, यह संभव है कि कुंजी बस शब्दकोश में मौजूद न हो, इस प्रकार कुंजी के वास्तविक एन्कोडिंग से कोई लेना-देना नहीं है। – heltonbiker
पायथन 3.2 में यूनिकोड कुंजी के साथ समस्या हो सकती है। – JDong
आपने इसे कैसे हल किया? मेरे पास 3.4.2 में एक ही समस्या है। मैंने चाबियाँ मुद्रित की हैं और चाबियां मौजूद हैं और अभी भी उपर्युक्त त्रुटि प्राप्त कर रही हैं। कोई भी अपडेट कृपया? – Vinodh