मान लें कि मेरे पास एक शब्दकोश है जिसका कुंजी तार हैं। मैं उस से एक नया शब्दकोश कुशलतापूर्वक कैसे बना सकता हूं जिसमें केवल कुछ सूची में मौजूद कुंजी शामिल हों?पायथन
उदाहरण के लिए:
# a dictionary mapping strings to stuff
mydict = {'quux': ...,
'bar': ...,
'foo': ...}
# list of keys to be selected from mydict
keys_to_select = ['foo', 'bar', ...]
तरह से मैं के साथ आया है:
filtered_mydict = [mydict[k] for k in mydict.keys() \
if k in keys_to_select]
लेकिन मुझे लगता है यह अत्यधिक अक्षम है क्योंकि: (1) यह कुंजी के साथ कुंजी की गणना की आवश्यकता है() , (2) इसे प्रत्येक बार key_to_select में k को देखने की आवश्यकता है। इनमें से कम से कम एक से बचा जा सकता है, मुझे लगता है। कोई विचार? यदि आवश्यक हो तो मैं भी scipy/numpy का उपयोग कर सकते हैं।
का उपयोग करते समय "यदि mydict में कश्मीर" इस तरह, अजगर एक has_key प्रकार लुकअप होता है या वह में एक सूची/iterable और उन पर पाश कुंजी परिवर्तित करता है? यदि यह बाद वाला है, "अगर mydict.has_key (k)" अधिक कुशल हो सकता है, नहीं? (अभी तक, किसी भी तरह से स्पष्टीकरण के लिए कोई दस्तावेज नहीं मिला है। Google कौशल मुझे विफल कर दिया है)। – pycruft
मेरे प्रश्न का उत्तर देने के लिए, "k in dict" का उपयोग करके "dict.has_key (k)" का उपयोग करने के समान है http://www.python.org/dev/peps/pep-0234/ – pycruft
@pycruft, yep , और, 'टाइमिट' सीकएन पुष्टि के रूप में ('python -mtimeit -s'd = dict.fromkeys (रेंज (99)) ''23 इन डी' आदि), वास्तव में, वास्तव में, लगभग दोगुनी है 'has_key' के रूप में (हर बार एक नाम-विशेषता लुकअप बचाता है, जो एक नियम लूलअप के समान ऑपरेशन के बारे में है)। 'Has_key' का उपयोग करने का कोई कारण नहीं है, और इसे पायथन 3 से हटा दिया गया है। –