2015-06-11 7 views
5

एक उपयोगकर्ता ने पूछा (Keyerror while using pandas in PYTHON 2.7) क्यों वह एक शब्दकोश में देखकर KeyError था और वह इस अपवाद से कैसे बच सकता है।क्या मैं `all` का सही उपयोग कर रहा हूं?

एक उत्तर के रूप में, मैंने सुझाव दिया कि वह पहले शब्दकोश में चाबियों की जांच करे। तो, अगर वह dictionary में सभी चाबियाँ ['key_a', 'key_b', 'key_c'] की जरूरत है, वह इसके साथ परीक्षण कर सकते हैं:

if not all([x in dictionary for x in ['key_a', 'key_b', 'key_c']]): 
    continue 

इस तरह वह शब्दकोशों कि उम्मीद चाबियाँ नहीं था की अनदेखी कर सकता है (शब्दकोशों की सूची JSON से बाहर बनाई गई है फ़ाइल से लोड स्वरूपित लाइनें)। * इस प्रश्न के लिए प्रासंगिक होने पर अधिक जानकारी के लिए मूल प्रश्न का संदर्भ लें।

एक उपयोगकर्ता पाइथन और एसओ में अधिक अनुभवी है, जिसे मैं अपने करियर के लिए इस मामले पर अधिकार मानता हूं और सोने के बैज ने मुझे बताया कि मैं all गलत तरीके से उपयोग कर रहा था। मैं सोच रहा था कि क्या यह वास्तव में मामला है (जो मैं कह सकता हूं, वह अपेक्षित काम करता है) और क्यों, या अगर यह जांचने का एक बेहतर तरीका है कि कुछ चाबियाँ एक शब्दकोश में हैं या नहीं।

+1

बस यहां अपने प्रश्न के लिए एक तरफ के रूप में, लेकिन यदि आप इस बात से चिंतित हैं कि कुंजी प्राप्त करने का प्रयास करने से पहले एक कुंजी में एक कुंजी है या नहीं, तो आप हमेशा 'get()' विधि को विधि पर कॉल कर सकते हैं। तो 'dict.get ('कुंजी', कोई नहीं) 'या तो' कुंजी 'या' कोई नहीं 'का मान वापस कर देगा, जहां' dict [' key '] 'के परिणामस्वरूप KeyError हो सकता है। – Jkdc

उत्तर

13

हाँ यह ठीक काम करेंगे, लेकिन आप भी सूची समझ

if not all(x in dictionary for x in ['key_a', 'key_b', 'key_c']): 
    continue 

की जरूरत नहीं है आप आसपास के [] है, तो यह all कॉल करने से पहले सभी तत्वों का मूल्यांकन करेंगे। यदि आप उन्हें हटाते हैं, आंतरिक अभिव्यक्ति जनरेटर है, और पहले False पर होगी।

+0

@MartijnPieters हमेशा के रूप में, आप सही हैं, महोदय। –

+3

'should_we = lambda: गलत # उदा। नहीं 'और 'destroy_world = lambda:" Cthulhu, दुनिया के खाने वाले को बुलाओ ", फिर' अगर सभी (f() f में (should_we, destruction_world)): प्रिंट ("क्या हम अभी भी यहां हैं?") '' दुनिया को नष्ट करो। –

+0

@MartijnPieters इसके साथ समस्या यह है कि Cthulhu समय के साथ-साथ जनरेटर अभिव्यक्ति क्रम में यात्रा कर सकता है, इसलिए उसे दुर्भाग्य से पहले कहा जा सकता है: पी – CoryKramer

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