2008-10-06 19 views
18

मैं एक सूची स्ट्रिंग टैग की है।अजगर शब्दकोश अद्यतन विधि

मैं सरणी अनुक्रमणिका के रूप में टैग स्ट्रिंग और मानों के रूप में कुंजी के साथ एक शब्दकोश को प्रारंभ करने का प्रयास कर रहा हूं।

for i, ithTag in enumerate(tag): 
    tagDict.update(ithTag=i) 

ऊपर रिटर्न मुझे { 'ithTag': 608} 608 608 सूचकांक

मेरे समस्या यह है कि जब मैं एक चर के रूप में व्याख्या की जा रही है, अजगर "ithTag" इलाज है है एक चर के बजाय एक स्ट्रिंग के रूप में।

मैं उलझन में हूं, इस तरह के विशिष्ट प्रश्नों को Google करना मुश्किल है। मुझे आशा है कि मैं इस सवाल का सही ढंग से के शीर्षक शब्दों में,

धन्यवाद!

+0

यह एक लगभग upvotable सवाल है। मुझे लगता है कि केवल चुना गया उत्तर [यह एक] से भी बदतर है (http://stackoverflow.com/a/179005/131120)। फॉर-लूप उत्तर चुनने के पीछे कारणों को बदलने या समझाने के लिए मन? – erikbwork

+0

मैंने इसे चुना क्योंकि यरूब ने पहले जवाब दिया; और मैंने अभी इसे तुरंत चिह्नित किया है। इसके अलावा एक सी #/जावा पृष्ठभूमि से आने वाले, Jerub का जवाब मेरे लिए अधिक परिचित लग रहा है और मैं क्यों .update() मेरे लिए काम नहीं किया के बारे में उनकी व्याख्या पसंद आया। – freshWoWer

उत्तर

46

आप वास्तव में ऐसा करना चाहते हैं:

for i, tag in enumerate(tag): 
    tagDict[tag] = i 

.update() विधि एक और शब्दकोश का उपयोग कर, एक एकल मुख्य/मान जोड़े को बदलने के लिए नहीं एक शब्दकोश अद्यतन करने के लिए प्रयोग किया जाता है।

2

मुझे लगता है कि यह आप क्या करना चाहते हैं:

d = {} 
for i, tag in enumerate(ithTag): 
    d[tag] = i 
17

प्रयास करें आप चतुर होना चाहते हैं: अद्यतन के लिए ब्रायन को

tagDict.update(map(reversed, enumerate(tag))) 

धन्यवाद। यह स्पष्ट रूप से पुनरावृत्त संस्करण की तुलना में ~ 5% तेज है।

(संपादित करें:। उनका कहना है मेरा उत्तर गलत (अब तय हो गई थी) शायद सबसे कुशल/pythonic तरीका टॉरस्टेन मारेक का जवाब होगा के लिए धन्यवाद Saverio, थोड़ा संशोधित:

tagDict.update((t, i) for (i,t) in enumerate(tag)) 

)

+0

वास्तव में, अद्यतन() सीधे एक दृश्य ले जा सकते हैं, इसलिए एक मध्यवर्ती dict का निर्माण करने की कोई आवश्यकता नहीं है। tagDict.update (गणना (टैग)) करने से वास्तव में थोड़ी (~ 5%) पुनरावृत्ति संस्करण की तुलना में तेज है। – Brian

+2

'टैगडिक्ट' की कुंजी 'टैग' के तत्व होने चाहिए। 'TagDict.update (मानचित्र (उल्टा, गणना) (टैग)) का उपयोग करें), वास्तव में टोरस्टन मरेक के उत्तर के कार्यात्मक समकक्ष। – rewritten

+0

@ क्लाउडियो, क्योंकि, जैसा कि पहले से ही सेवरियो का उल्लेख है, 'tagDict.update (enumerate (टैग))' सूचकांक को dict कुंजी के रूप में बनाता है, जबकि वे मान – warvariuc

12

यह एक एक लाइनर:

tagDict = dict((t, i) for i, t in enumerate(tag)) 
+0

मुझे लगता है कि यह स्वीकार्य उत्तर होना चाहिए - यह स्पष्ट है कि यहां क्या हो रहा है, इसके बारे में चिंता करने के लिए कोई दुष्प्रभाव नहीं है। –

2

मुझे लगता है कि क्या आप चाहते हैं यह है:

for i, ithTag in enumerate(tag): 
    tagDict.update({ithTag: i}) 
संबंधित मुद्दे