2012-10-20 18 views
15

अजगर में यह है करने के लिए कष्टप्रद है की जाँच करने के लिए कि क्या एक प्रमुख शब्दकोश में है पहले यह incrementing से पहले:अजगर शब्दकोश वेतन वृद्धि

if key in my_dict: 
    my_dict[key] += num 
else: 
    my_dict[key] = num 

वहाँ ऊपर चार लाइनों के लिए एक छोटी विकल्प है?

+0

क्या आप यह वही चीज़ दो मानों के लिए कर सकते हैं? – Mohsin

उत्तर

33

एक विकल्प है:

my_dict[key] = my_dict.get(key, 0) + num 
+0

क्या आप इसे कई मानों के लिए कर सकते हैं? मेरा मतलब है एक लूप के बिना एक से अधिक मूल्य – Mohsin

+1

? चूंकि 'dict' एक अभिव्यक्ति में एकाधिक तत्वों तक पहुंचने का कोई तरीका प्रदान नहीं करता है, मैं नहीं देखता कि कैसे। –

+0

ओपी की तरह एक लूप के साथ ही अपने प्रश्न में लिखता है, लेकिन प्रति कुंजी दो मानों में वृद्धि एक – Mohsin

14

आप काफी कुछ विकल्प हैं। मैं Counter का उपयोग कर पसंद:

>>> from collections import Counter 
>>> d = Counter() 
>>> d[12] += 3 
>>> d 
Counter({12: 3}) 

या defaultdict:

>>> from collections import defaultdict 
>>> d = defaultdict(int) # int() == 0, so the default value for each key is 0 
>>> d[12] += 3 
>>> d 
defaultdict(<function <lambda> at 0x7ff2fe7d37d0>, {12: 3}) 
+1

'लैम्ब्डा: 0' के लिए, आप बस' int 'कह सकते हैं। – hughdbrown

+1

@hughdbrown: धन्यवाद, मैं उसे कभी नहीं जानता था। आपकी टिप्पणी के बिना – Blender

+0

@hughdbrown मैं कभी नहीं समझूंगा कि डिफ़ॉल्ट डिफॉल्ट क्या कर रहा था। धन्यवाद। –

4

परिणत:

if key in my_dict: 
    my_dict[key] += num 
else: 
    my_dict[key] = num 

निम्नलिखित का उपयोग कर setdefault में:

my_dict[key] = my_dict.setdefault(key, 0) + num 
संबंधित मुद्दे