2012-05-02 12 views
1

内の要素を加重カウントします。を効率的だから私は次のようにPythonの辞書を持っているリスト

、その後、私は別のPythonの辞書がありますので、 score_dict = {

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

、私が欲しいものです。..最初のdictで 、2つの色が同時に発生回数をカウントします。 など。 しかし、その数に重みを掛けてください。例えば

をので、PID 1 赤と青が1回発生するために:

私は青がこのリストに一緒に発生した赤回数を知りたいです。

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

次いで第2

ため私は

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

を形成することができる2つの青色、赤色ペアがされるように、青色と赤色occuringの合計スコアが一緒になって2 + 20 + 20 = 42

あります

また、3色に拡張するにはどうすればよいですか?

「赤い」「青い」と「緑色」が一緒に出現しているのが分かりますか?

+2

私はあなたがどのように派生したのか分からなかったので、これは(2 * 20)+(2 * 20) '。 2つの赤と青のペアがありますので、2 * 20ではいけませんか? – Abhijit

+0

@Abhijit:hi .. correct ..申し訳ありません私の悪い。 :( – Fraz

+0

@Abhijit:編集済み..ありがとう – 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) 
関連する問題