2013-05-29 3 views
1
my_dict = {'a1':2,'a2':3,'b1':1,'b2':5,'b3':8} 

레이블 'a'와 'b'의 곱을 같은 숫자로 합하고 싶습니다.사전에서 값의 곱을 합하는 람다 함수

result = a1*b1 + a2*b2 

참고 : 해당하는 A3가 없기 때문에 B3가 무시됩니다.

내 코드 :

result = sum (lambda x * y, if str(key)[0] == a and str(key)[0] ==b and str(key)[1] == str(key)[1], my_dict) 
+2

그리고 귀하의 질문은 무엇입니까? –

답변

1

당신은 아마 별도의 기능으로 필터를 탈출 것을 여기에 충분한 논리를 가지고 :

my_dict = {'a1':2,'a2':3,'b1':1,'b2':5,'b3':8} 

def filtered(d): 
    for key in d: 
     if not key.startswith('a'): 
      continue 

     b_key = "b" + key[1:] 

     if b_key not in d: 
      continue 

     yield d[key], d[b_key] 

sum(a * b for a, b in filtered(my_dict)) 
+0

답변 해 주셔서 감사합니다. – Selvam

+0

AttributeError : 'dict'객체에 'startswith'속성이 없습니다. – Selvam

+0

@Selvam - 위의 코드를 실행하면 17이 나오고 AttributeError는 발생하지 않습니다. 새 코드를 사용하여 새 질문을 할 수도 있습니다. –

1
my_dict = {'a1':2,'a2':3,'b1':1,'b2':5,'b3':8} 
result = 0 

for i in range(1, (len(my_dict) + 1)/2): 
    if not my_dict.has_key("a" + str(i)) \ 
     or not my_dict.has_key("b" + str(i)): 
     break 
    result += my_dict["a" + str(i)] * my_dict["b" + str(i)] 
1
from itertools import combinations 
mydict={'a1':2,'a2':3,'b1':1,'b2':5,'b3':8} 

result=sum(mydict[x]*mydict[y] for x,y in combinations(mydict.keys(),2) if x[1]==y[1]) 
+0

AttributeError : 'list'객체에 'keys'속성이 없습니다. – Selvam

+0

어떤 목록을 참조하고 있습니까? 코드를 다시 작성한 후 17 번째로 반환했습니다. 그리고 당신도 @jamylak의 코드에 반대하는 것을 보았습니다, 그러나 그것은 또한 작동합니다. 어떤 버전의 파이썬을 사용하고 있습니까? – phil1710

+0

사과드립니다. my_dict는 다음과 같습니다 : ; [{u'a10 ': 33}, {u'a13': 26}, {u'a14 ': 95}, {u'b03': 28}, {u'b13 ': 12}, {u'b23 ': 3}, {u'b43': 69}] – Selvam

1
from collections import defaultdict 
from functools import reduce 
from operator import mul 

my_dict = {'a1':2,'a2':3,'b1':1,'b2':5,'b3':8} 

D = defaultdict(dict) 

for k in my_dict: 
    a, b = k 
    D[b][a] = my_dict[k] 

print sum(reduce(mul, d.values()) for d in D.values() if len(d) >= 2) 

17 
+0

a, b = k // valueError : 포장을 풀려면 1 개 이상의 값이 필요합니다. – Selvam

+0

사과드립니다. my_dict는 다음과 같습니다 : ; [{u'a10 ': 33}, {u'a13': 26}, {u'a14 ': 95}, {u'b03': 28}, {u'b13 ': 12}, {u'b23 ': 3}, {u'b43': 69}] – Selvam