2017-02-18 6 views
8

मौजूद नहीं है, तो मैं dict.keys() में कुंजी नहीं होने पर कुंजी में एक कुंजी-मूल्य जोड़ी डालना चाहता हूं। मूल रूप से मैंपाइथन dict में एक कुंजी अपडेट करता है यदि यह

if key not in d.keys(): 
    d[key] = value 

साथ यह कर सकता है लेकिन वहाँ एक बेहतर तरीका है? या इस समस्या के लिए पाइथोनिक समाधान क्या है?

उत्तर

20

आपका वाक्यविन्यास अमान्य है, और न ही आपको d.keys() पर कॉल करने की आवश्यकता है।

if key not in d: 
    d[key] = value 

पर्याप्त है। कोई स्पष्ट, अधिक पठनीय विधि नहीं है।

आप dict.get() के साथ फिर से अद्यतन कर सकता है, जो एक मौजूदा मूल्य वापसी होगी यदि कुंजी पहले से मौजूद है:

d[key] = d.get(key, value) 

लेकिन मैं दृढ़ता से इस के खिलाफ सिफारिश; यह कोड गोल्फ़िंग है, रखरखाव और पठनीयता में बाधा डाल रहा है।

8

उपयोग dict.setdefault():

>>> d = {1: 'one'} 
>>> d.setdefault(1, '1') 
'one' 
>>> d # d has not changed because the key already existed 
{1: 'one'} 
>>> d.setdefault(2, 'two') 
'two' 
>>> d 
{1: 'one', 2: 'two'} 
+2

'dict.setdefault()' वास्तव में केवल जब भी मूल्य पर पहुंचने का प्रयास किया जाना चाहिए। –

+2

@MartijnPieters: यह क्यों मायने रखता है? 'Setdefault()' नाम स्पष्ट रूप से वर्णन करता है कि क्या हो रहा है - यह भी एक मूल्य लौटाता है, यह महत्वपूर्ण नहीं है, और थोड़ा कर्कश आईएमओ है। क्या आप त्वरित स्पष्टीकरण प्रदान कर सकते हैं, या एक के लिए एक लिंक, यह क्यों वांछनीय नहीं है? – mhawke

+1

आप इसे एक अभिव्यक्ति में उपयोग करेंगे जो एक मानने की अपेक्षा करता है, जैसे समूहबद्ध लूप में: 'obj में iterable: d.setdefault (key_for_obj (obj), [])। Append (obj)'। मूल्य वापस लौटने के बारे में कुछ भी नहीं है, * यह विधि * का पूरा बिंदु है। –

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