我想要一个显示布尔计数的字典。 即名称/职位组合符合标准的频率。 例如:
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
由于一个错误,我得到了"语法错误:用于增强赋值的非法表达式"
所以谷歌搜索给了我这个:
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' 对象不可迭代
这是怎么回事?
你想用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
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())
将从字典psHpGrp
中获取键str(f[1]) + str(f[7])
的对象,如果不存在,则创建一个新Counter
。
然后它将.update([f[6] == 1])
条件的结果 f[6] == 1
,可以是 True
或 False
.然后Counter
保存 True
s 和 False
s 的数量作为字典。它们代表你的"Yes"/"No"
,只是它们是布尔值。
就像@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 让你知道有问题的代码在哪一行,最好至少发布那行代码。