1

だから私は次のようなpython dictを持っています:

 1:[ "red","blue","green"]
 2: ["blue","blue","red"]..

等々。

そして、別のpython dictがあります: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回目

私が形成できる2つの青と赤のペアがあります

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

したがって、青と赤が同時に発生した場合の合計スコアは 2 + 20 + 20 = 42 です。

また、どうすれば3色に拡張できますか?

「赤」「青」「緑」が同時に発生することを見つけなければならない場合のように?

4

2 に答える 2

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())
于 2012-05-02T20:54:38.063 に答える
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)
于 2012-05-02T20:56:16.080 に答える