के लिए मैं एक शब्दकोश में एक समान रूप में अजगर में कुछ डेटा स्टोर करना चाहते हैं: {1:'a', 2:'b'}
। प्रत्येक मूल्य अद्वितीय होगा, न केवल अन्य मूल्यों के बीच, बल्कि कुंजी के बीच भी।प्रतिवर्ती शब्दकोश अजगर
वहाँ एक सरल डेटा संरचना है कि मैं अगर मैं 'कुंजी' या 'मूल्य' का उपयोग कर पूछना इसी वस्तु कोई बात नहीं प्राप्त करने के लिए उपयोग कर सकते हैं है? उदाहरण के लिए:
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a['b']
2
>>> a[3]
KeyError
'कुंजी', मानक अजगर ints हैं एक मूल्यों कम (< 256char) तार कर रहे हैं।
मेरे वर्तमान समाधान एक उलट शब्दकोश बनाने और अगर मैं मूल शब्दकोश में एक परिणाम नहीं मिल सकता है यह खोज कर रहा है: मेरे शब्दकोशों
pointsreversed = dict((v, k) for k, v in points.iteritems())
def lookup(key):
return points.get(key) or pointsreversed.key()
यह दो बार के रूप में ज्यादा स्थान का उपयोग करता है, जो महान नहीं है (कुछ सौ मेग्स तक हो सकता है) और औसतन 50% धीमी है।
संपादित करें: के रूप में कुछ जवाब में उल्लेख किया है, दो dicts, नहीं डबल स्मृति उपयोग करता है, क्योंकि यह केवल शब्दकोश, उसके अंदर के आइटम है, कि दोहराव है।
वहाँ एक समाधान है कि इस पर सुधार है?
आपके उदाहरण में, क्या आपका वास्तव में मतलब है [1] रिटर्न '1'? ऐसा लगता है कि आप इसे 'ए' वापस करना चाहते हैं। –
ओह, निश्चित धन्यवाद –
(0) pointsreversed.key() ??? - कृपया वास्तविक वर्किंग कोड कॉपी/पेस्ट करें (1) लुकअप की औसत संख्या एन * (2-पी) होनी चाहिए जहां पी = प्रो (1 डॉट में पाया गया); "50% धीमी" का अर्थ है कि पी छोटा है या आपने ओवरहेड (2) पेश किया है, तब तक आपके तारों को डुप्लीकेट नहीं किया जाएगा जब तक कि आपने कुछ असाधारण नहीं किया है, इसलिए आपका मेमोरी उपयोग दोगुना नहीं होगा। (3) यह कैसे आती है कि आप नहीं जानते कि आपके पास कोई वस्तु या स्ट्र ऑब्जेक्ट है या नहीं? –