2012-05-02 2 views
1

에 가중 계수를 요소를 않습니다. score_dict 그래서 = {효율적 그래서 같은 파이썬 딕셔너리가 목록

pid: weight 
1: 2 
2: 20 
... 
} 

, 난이 원하는 .. 첫 번째 DICT에 , 두 가지 색상이 함께 발생 횟수를 계산 :

하고는 내가 다른 파이썬 딕셔너리 있습니다. 등등. 하지만 그 무게에 무게를 곱하십시오. 나는 많은 시간이 파란색이 목록에서 함께 발생 빨간색 방법을 찾으려면

: 예를 들어

때문에 PID 1 위해 빨간색과 파란색은 한 번 발생합니다.

so this is (1*2) # 2 comes from the score_dict as pid1 has a weight 2 

다음하는 제 2

두 파란색, 빨간색 쌍 I 함께 2 + 20 + 20 = 42

인 파랑 및 빨강 발생하는 대해

so this is (1*20) + (1*20) 

따라서 총 점수를 형성 할 수있다

또한 어떻게 3 가지 색상으로 확장 할 수 있습니까?

내가 "빨간색" "파란색"과 "녹색"을 함께 발견해야하는 것처럼?

+2

나는 당신이 파생 된 방법을 얻지 못했습니다. 그래서 this is (2 * 20) + (2 * 20)'. 두 개의 빨간색과 파란색 쌍이 있으므로 2 * 20이되어서는 안됩니까? – Abhijit

+0

@Abhijit : 안녕 .. 정답 .. 미안해. : ( – Fraz

+0

@Abhijit : edited .. 감사합니다 – Fraz

답변

4
from collections import Counter 

dict1 = {1:[ "red","blue","green"], 2: ["blue","blue","red"]} 

weight = {1: 2, 2: 20} 

score = 0 

for k,v in dict1.iteritems(): 
    score += weight[k] * Counter(v)["red"] * Counter(v)["blue"] 

결과 : 내 코드의 마지막 부분은 발전기 이해로 다시 작성할 수 있습니다

>>> score 
42 

:

score = sum(weight[k] * Counter(v)["red"] * Counter(v)["blue"] for k,v in dict1.iteritems()) 
2

나는 완전히 이해하지만, 여기에 생각이 확실하지 : '

from collections import Counter 

data = { 
    1: ['red','blue','green'], 
    2: ['blue','blue','red'], 
} 

weights = { 
    1: 2, 
    2: 20, 
} 

for k, v in data.items(): 
    score = sum([c * weights[k] for c in Counter(v).values()]) 
    print "so this is: %s val = %d" % (k, score)