2011-10-20 6 views
6

में शब्दकोशों को इनवर्टिंग करना मैं जानना चाहता हूं कि पाइथन में शब्दकोशों को बदलने के लिए कौन सी कुशल विधि होगी। मैं चाबियों की तुलना करके डुप्लिकेट मानों से छुटकारा पाना चाहता हूं और छोटे मानते हुए बड़े पैमाने पर चुनना चाहता हूं जिनकी तुलना उनकी तुलना की जा सकती है। यहाँ एक शब्दकोश inverting है:पायथन

inverted = dict([[v,k] for k,v in d.items()]) 

उत्तर

8

सबसे बड़ी कुंजी का उपयोग करके डुप्लिकेट को हटाने के लिए, अपने शब्दकोश इटेटरेटर को मूल्य से क्रमबद्ध करें। "कुंजी की तुलना और छोटे संभालने वे तुलना की जा सकती से अधिक बड़ा चयन करके मैं भी डुप्लिकेट मानों से छुटकारा पाने के लिए चाहते हैं।"

import operator 
inverted = dict((v,k) for k,v in sorted(d.iteritems(), key=operator.itemgetter(1))) 
0

यहाँ है एक शब्दकोश inverting और किसी भी डुप्लिकेट मानों के बड़े रखने का एक सरल और सीधा कार्यान्वयन:

inverted = {} 
for k, v in d.iteritems(): 
    if v in inverted: 
     inverted[v] = max(inverted[v], k) 
    else: 
     inverted[v] = k 

यह साथ कड़ी कर दी गई-अप किया जा सकता है एक सा dict.get():

inverted = {} 
for k, v in d.iteritems(): 
    inverted[v] = max(inverted.get(v, k), k) 

इस कोड को कम तुलना करता है और एक दृष्टिकोण का प्रयोग कर की तुलना में कम स्मृति का उपयोग करता है()

+7

: dict करने के लिए कॉल पिछले कुंजी डाला का उपयोग करेगा – agf