2013-07-15 8 views
14

लौटने मैं एक शब्दकोशनिकालें कुंजी नया शब्दकोश

d = {'a':1, 'b':2, 'c':3} 

मैं एक प्रमुख को हटाने की जरूरत है, कहते हैं कि और एक समारोह कॉल में है कि कुंजी के बिना शब्दकोश लौट

{'a':1, 'b':2} 

d.pop ('c') कुंजीपटल - 3 - शब्दकोश के बजाए वापस करेगा।

मैं एक समारोह समाधान की जरूरत है अगर यह मौजूद है, के रूप में इस comprehensions

+0

'd.pop ('c') वापसी डी'? –

+0

@VictorCastilloTorres, यह 'सी' का मान देता है, जो इस मामले में 3 है। – Xeos

+0

मुझे लगता है कि यह 'True' नहीं है क्योंकि पहले आप' c' के मान को हटाते हैं और अब 'd = {'a': 1, 'b': 2} 'और यदि आप' वापस लौटाते हैं 'तो यह' {'ए': 1, 'बी': 2} ' –

उत्तर

15

कैसे इस बारे में में जाना जाएगा जा रहा हूँ:

{i:d[i] for i in d if i!='c'} 

यह Dictionary Comprehensions कहा जाता है और यह अजगर 2.7 के बाद से उपलब्ध है।

या यदि आप अजगर 2.7 से अधिक उम्र के प्रयोग कर रहे हैं:

dict((i,d[i]) for i in d if i!='c') 
+0

हाँ, पूरी तरह से काम करता है। मुझे यह काम करने के लिए मिला है: 'dict (set (d.items()) - {('c', 0)})' लेकिन ऐसा इसलिए है क्योंकि मुझे पता था कि 'c' मान लेगा। आपका समाधान अधिक है .. व्यापक – Xeos

+0

छोटे डेटा सेट (जो मुझे संचालित करने की आवश्यकता है) पर प्रदर्शन को चालू करता है। – Xeos

+0

'dict (i, d [i]) i में d अगर मैं! = 'C')' - ब्राउनी आपके लिए एक और इंटरमीडिएट सूची/टुपल बनाने के लिए इंगित करता है :) – haridsv

5

क्यों ना आप अपना रोल नहीं? ,

def without(d, key): 
    new_d = d.copy() 
    new_d.pop(key) 
    return new_d 
+0

हाँ, यह एक समाधान है। दुर्भाग्य से मैं देशी तरीकों से फंस गया हूं और मैं अपना खुद का कोई भी जोड़ नहीं सकता हूं। लेकिन यह पूरी तरह से काम करेगा। – Xeos

+1

जिज्ञासा से बाहर, आप अपने कार्यों को कैसे परिभाषित नहीं कर सकते हैं? –

+0

यह एक असाइनमेंट है जिसे मुझे केवल समझ और मूल कार्यों का उपयोग करने की आवश्यकता है, इसलिए कोई बाहरी मॉड्यूल भी नहीं। – Xeos

0

इस काम करेंगे

(lambda dict_,key_:dict_.pop(key_,True) and dict_)({1:1},1) 

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

पायथन में ऐसे कार्य हैं जो किसी ऑब्जेक्ट को स्थानांतरित करते हैं, और बदली हुई ऑब्जेक्ट की बजाय मान लौटाते हैं, {} .pop फ़ंक्शन एक उदाहरण है।

हम नीचे अधिक सामान्य उदाहरण के रूप में एक लैम्ब्डा समारोह का उपयोग कर सकते हैं, या (लैम्ब्डा समारोह: obj: (समारोह (obj) और झूठी) या obj) इस व्यवहार को बदलने के लिए, और एक अपेक्षित व्यवहार मिलता है।

+0

"आपका उत्तर निश्चित रूप से थोड़ा स्पष्टीकरण के लायक है। कृपया http://stackoverflow.com/help/how-to-answer देखें। टिप्पणियां खोजने योग्य सामग्री बनाने में मदद करेंगी। " –

संबंधित मुद्दे