2010-12-16 23 views
6

वास्तव में दो प्रश्न: यदि मेरे पास एक शब्दकोश है (जो मूल रूप से एक जेसन संदेश को पार्स करने से आया था) जिसमें एक वैकल्पिक सरणी है उस में: वहाँ अगर संरक्षण और पाश के लिए गठबंधन करने के लिए किसी भी अजगर तरीका हैपायथन: "if 'x' dict में" और "i i dict ['x']"

if 'kids' in dict: 
    for k in dict['kids']: 
     #do stuff 

मेरा पहला सवाल:

dict_with = {'name':'bob','city':'san francisco','kids': {'name': 'alice'} } 
dict_without = {'name':'bob','city':'san francisco' } 

मैं सामान्य रूप से की तरह कोड के लिए होता है?

दूसरा प्रश्न मेरे पेट मुझे, मूल json संदेश के लिए बेहतर डिजाइन बताता है कि एक खाली शब्दकोश के साथ हमेशा बच्चे तत्व निर्दिष्ट करने के लिए होगा:

dict_better = {'name':'bob','city':'san francisco','kids': {} } 

मैं किसी भी डिजाइन पद्धति नहीं मिल सकता है यह साबित करता है। जेसन संदेश एक वेब सेवा से एक राज्य संदेश है जो जेसन और एक्सएमएल प्रतिनिधित्व का समर्थन करता है। चूंकि उन्होंने एक्सएमएल के साथ शुरुआत की, इसलिए उन्होंने इसे "बच्चों" तत्व को वैकल्पिक बना दिया, जो यह देखने के लिए ऊपर की संरचना को मजबूर करता है कि यह देखने के लिए कि क्या सरणी पर पुनरावृत्ति करने से पहले तत्व मौजूद है या नहीं। मैं जानना चाहता हूं कि यह तत्व कहने के लिए बेहतर डिजाइन-वार है कि तत्व आवश्यक है (यदि कोई तत्व नहीं है तो खाली सरणी के साथ)।

उत्तर

7

कोई खाली अनुक्रम परिणाम पुनरावृत्ति में नहीं है।

for k in D.get('kids',()): 
+1

किसी भी व्यक्ति के लिए जो नहीं जानता था, 'dict.get (कुंजी, डिफ़ॉल्ट) 'मौजूद होने पर मान' कुंजी 'से संबंधित मूल्य देता है या यदि यह नहीं होता है तो' डिफ़ॉल्ट '। – DGH

+1

... और '()' खाली टुपल है। सहजता से, मैं '[]' के साथ गया होता, लेकिन वैसे भी कोई व्यावहारिक अंतर नहीं है। – delnan

+0

@ डेलनान यह काफी संभव है कि आपकी वृत्ति का उपयोग करना है [] क्योंकि इनपुट अनुक्रम प्रकार (उदा। 'क्रमबद्ध') के बावजूद इतने सारे मानक लाइब्रेरी फ़ंक्शन रिटर्न सूचियां हैं। मेरी वृत्ति को पसंद करना है() क्योंकि यह किसी भी चीज को करने की इच्छा की कमी की कमी करता है जिसके परिणामस्वरूप एक सूची की आवश्यकता होती है। ;) –

4

[x for x in dict_with.get('kids')], आप सूची समझ के साथ इस filter, map - a functional programming tools उपयोग कर सकते हैं।

  • सूची समझ लिखने के लिए अधिक संक्षिप्त हैं।
  • लूप स्टेटमेंट के लिए मैन्युअल से बहुत तेज चलाता है।
  • key-error से बचने के लिए dict_with.get('xyz',[]) का उपयोग खाली सूची लौटाता है।
संबंधित मुद्दे