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:扩充赋值的非法表达式”

所以谷歌搜索给了我这个:

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,可以是Trueor False。然后将s 和sCounter的数量保存为字典。它们代表你的,只是它们是布尔值。TrueFalse"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 回答