Efficient way to sum a product of numbers...

Tim Chase python.list at tim.thechases.com
Mon Aug 31 12:59:01 EDT 2009


vsoler wrote:
> On Aug 31, 6:30 pm, Tim Chase <python.l... at tim.thechases.com> wrote:
>>> After simplifying my problem, I can say that I want to get the sum of
>>> the product of two culumns:
>>> Say
>>>          m= [[ 'a', 1], [ 'b', 2],[ 'a', 3]]
>> assuming you meant ['c', 3] here...    ^>          r={'a':4, 'b':5, 'c':6}
>>
>>> What I need is the calculation
>>>          1*4 + 2*5 + 3*4 = 4 + 10 + 12 = 26
>> and you mean "3*6" here instead of "3*4", which is 18 instead of
>> 12, making the whole sum 4+10+18=32
>>
>> Then it sounds like you could do something like
>>
>>   result = sum(v * r[k] for k,v in m)
>>
>> where "m" is any arbitrary iterable of tuples.  If the keys (the
>> letters) aren't guaranteed to be in "r", then you can use
>> defaults (in this case "0", but could just as likely be "1"
>> depending on your intent):
>>
>>   result = sum(v * r.get(k,0) for k,v in m)
>>
>> If the conditions above don't hold, you'll have to introduce me
>> to your new math. ;-)

> There is no mistake in my original post, so I really meant [ 'a', 3]

Ah...that makes more sense of the data.  My answer still holds 
then.  Use the r[k] version instead of the r.get(...) version, 
and it will throw an exception if the rate doesn't exist in your 
mapping.  (a KeyError if you want to catch it)

-tkc





More information about the Python-list mailing list