0

ブール値を示す辞書が必要です。つまり、名前と役職の組み合わせが基準を満たす頻度です。例えば:

Key - Value1 - Value2
John12 Yes:300 No:25 
John13 Yes:400 No:29 
Linda13 Yes:300 No:60 

...

私はこれを試しました:

if str(f[1]) + str(f[7]) in psHpGrp:
    if f[6] == 1:
        psHpGrp.setdefault(str(f[1]) + str(f[7]), []) +=1

そして、バグのために「SyntaxError: illegal expression for Augmented Assignment」を取得しました

だからグーグルは私にこれを与えました:

if str(f[1]) + str(f[7]) in psHpGrp:
    if f[6] == 1:
        i = psHpGrp.setdefault((f[1]) + str(f[7]), [])
        i += 1    
    else:
        j = psHpGrp.setdefault((f[1]) + str(f[7]), [])
        j += 1 
else:
    psHpGrp.setdefault(str(f[1]) + str(f[7]), []).append(str(f[1]) + str(f[7]))    

そして今、私は得る: j += 1 'int' object is not iterable

ここで何が問題なのですか?

4

3 に答える 3

4

使用したいdefaultdict

>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['a'] += 1
>>> d['b'] += 1
>>> d['b'] += 1
>>> print d['a'], d['b'], d['c']
1 2 0
于 2012-05-23T11:38:19.630 に答える
0
from collections import Counter

psHpGrp.setdefault(str(f[1]) + str(f[7]), Counter()).update([f[6] == 1])

最初の部分:

psHpGrp.setdefault(str(f[1]) + str(f[7]), Counter())

はキーのオブジェクトをstr(f[1]) + str(f[7])ディクショナリから取得し、psHpGrp存在しない場合は新しい を作成しますCounter

次に、または.update([f[6] == 1])の条件の結果を返しf[6] == 1ます。は、との数を辞書として保持します。それらはあなたの を表していますが、それらはブール値です。TrueFalseCounterTrueFalse"Yes"/"No"

于 2012-05-23T11:38:04.573 に答える
0

@larsmansが言ったように、intをリストに追加することはできません(を使用+=)。最初の試行で に置き換え[]0から、そのエントリの番号を増やします。

if str(f[1]) + str(f[7]) in psHpGrp:
    if f[6] == 1:
        psHpKey = str(f[1]) + str(f[7])
        psHpGrp.setdefault(psHpKey, 0)
        psHpGrp.setdefault[psHpKey] +=1

また、あなたの最終的なエラーは、あなたが投稿していないコードから発生しているようです. Python は、問題のあるコードがどの行にあるかを知らせてくれます。少なくともそのコード行を投稿することをお勧めします。

于 2012-05-23T12:49:07.873 に答える