我想要一个显示布尔计数的字典。即名称/位置组合符合标准的频率。例如:
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'对象不可迭代
这里有什么问题?
答案 0 :(得分:3)
您想使用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
答案 1 :(得分: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
条件True
的结果,可以是False
或Counter
。 True
将False
和"Yes"/"No"
的数量保存为字典。它们代表您的{{1}},只是它们是布尔值。
答案 2 :(得分:0)
+=
)。在您的初始尝试中,将[]
替换为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让你知道违规代码在哪一行,最好发布至少那段代码。