एक शब्दकोश में सभी मूल्यों को कैसे योग करें?


239

मान लीजिए कि मेरे पास एक शब्दकोश है जिसमें कुंजियों के पूर्णांक के लिए नक्शा है जैसे:

d = {'key1': 1,'key2': 14,'key3': 47}

वहाँ में मानों का योग वापस जाने के लिए एक वाक्य रचना minimalistic रास्ता नहीं है dयानी 62इस मामले में?


2
सिर्फ मनोरंजन के लिए: sumअपने आप को लागू करें reduce- reduceएक अधिक सामान्य रूप है (उदाहरण के लिए sum, minऔर maxसभी के संदर्भ में लिखा जा सकता हैreduce ) और अन्य समस्याओं (जैसे product) को आसानी से हल कर सकते हैं।

1
गुइडो के कहने के बारे में क्या है - मुझे लगता है कि मुझे यह सही ढंग से याद है - कि कमी दूर हो रही है? मैं तुम्हारे साथ हूँ। इसे भाषा से क्यों हटाएं?
ऑक्टोपसग्राबस

जवाबों:


471

जैसा कि आप उम्मीद करेंगे:

sum(d.values())

1
ठीक है, Python 2.7.12यह भी अच्छी तरह से साथ काम करता हैsum(d.values())
LancelotHolmes

7
@LancelotHolmes हां, लेकिन यह स्मृति में एक सूची बनाता है, और इस प्रकार बड़े शब्दकोशों के लिए संसाधन सीमा के करीब / धीमी हो सकती है। इस प्रकार, इस उत्तर में कहा गया है कि आप पायथन 2 की चर्चा करते समय "आप का उपयोग करना चाहिए " के बजाय "उपयोग करना चाहते हैं" हो सकता है
phihag

अच्छा! मैंने इसे सिर्फ इसलिए मांगा क्योंकि मुझे पता था कि ऐसा कुछ होगा। ऐसा नहीं है कि पाश के लिए एक मुर्ख मूर्ख लिखने में बहुत अधिक मेहनत लगती है;)
रनलेवेल0

मुझे नहीं पता कि तुम अजगर से प्यार करते हो, अगर तुम अजगर 3 से प्यार करते हो, या अगर वास्तव में अजगर 2 का जिक्र कर रहे हो
Lucas Vazquez

1
@LucasVazquez यह पायथन 2 (या 1) को संदर्भित करता है। मैंने इसे आजकल अप्रासंगिक कर दिया है - भले ही आप Python2 में नया कोड लिखते हों, आप इसका उपयोग कर सकते हैं d.values()
फ़िहाग

70

पायथन 2 में आप itervalues()डिक्शनरी विधि का उपयोग करके सभी मूल्यों की एक अस्थायी प्रतिलिपि बनाने से बच सकते हैं , जो डिक्शनरी की कुंजी का एक पुनरावर्तक लौटाता है:

sum(d.itervalues())

पायथन 3 में आप सिर्फ d.values()इसलिए उपयोग कर सकते हैं क्योंकि उस विधि को करने के लिए बदल दिया गया था (और itervalues()हटा दिया गया था क्योंकि अब इसकी आवश्यकता नहीं थी)।

संस्करण स्वतंत्र कोड लिखना आसान बनाने के लिए जो हमेशा शब्दकोश की कुंजियों के मूल्यों पर निर्भर करता है, एक उपयोगिता फ़ंक्शन मददगार हो सकता है:

import sys

def itervalues(d):
    return iter(getattr(d, ('itervalues', 'values')[sys.version_info[0]>2])())

sum(itervalues(d))

यह अनिवार्य रूप से बेंजामिन पीटरसन का sixमॉड्यूल क्या करता है।


5
हाँ, हालांकि यह अजगर 3 के लिए लागू नहीं होता है
टोकन

15

ज़रूर है। यहाँ एक शब्दकोश के मूल्यों को योग करने का एक तरीका है।

>>> d = {'key1':1,'key2':14,'key3':47}
>>> sum(d.values())
62


3

मुझे लगता sum(d.values())है कि राशि प्राप्त करने का सबसे कारगर तरीका है।

आप लम्बडा एक्सप्रेशन के साथ योग की गणना करने के लिए कम फंक्शन की कोशिश कर सकते हैं:

reduce(lambda x,y:x+y,d.values())


0

phihag का उत्तर (और इसी तरह के) python3 में काम नहीं करेगा।

अजगर 3 के लिए:

d = {'key1': 1,'key2': 14,'key3': 47}
sum(list(d.values()))

अपडेट करें! शिकायतें हैं कि यह काम नहीं करता है! मैं सिर्फ अपने टर्मिनल से एक स्क्रीनशॉट संलग्न करता हूं। संस्करणों आदि में कुछ बेमेल हो सकता है।

यहां छवि विवरण दर्ज करें


अगर हम इस तरह से प्रयास करें तो भी यही मुद्दा मौजूद है
जीवन किशोर

यह सिर्फ मेरे लिए ठीक काम करता है! मैंने स्क्रीनशॉट के साथ अपना उत्तर अपडेट किया (यहां नहीं कर सकता); यह संस्करणों के साथ कुछ करने के लिए हो सकता है ...
रेजा

0

आप इसके लिए 'लूप के लिए' पर विचार कर सकते हैं:

  d = {'data': 100, 'data2': 200, 'data3': 500}
  total = 0
  for i in d.values():
        total += i

कुल = 800


1
या बस sum(d.values()), चूंकि .values()रिटर्न ए List
Linny

हाँ, यह एक और तरीका है।
राहुल पटेल

-1

आप शब्दकोश में सभी मूल्यों का एक जनरेटर प्राप्त कर सकते हैं, फिर इसे एक सूची में डाल सकते हैं और सभी मूल्यों का योग प्राप्त करने के लिए योग () फ़ंक्शन का उपयोग कर सकते हैं।

उदाहरण:

c={"a":123,"b":4,"d":4,"c":-1001,"x":2002,"y":1001}

sum(list(c.values()))

1
यह एक उत्तर कैसे है, अगर यह काम नहीं करता है। अन्य उत्तरों के लिए एक टिप्पणी की तरह देखें।
मार्टिन थोरसेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.