pythons“setdefault”增广赋值函数的替代方法

2024-06-25 22:57:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一本显示布尔数的字典。一、 姓名/职位组合符合标准的频率。E、 g.:

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

。。。在

我试过了:

^{pr2}$

因为一个bug,我得到了“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'对象是不可编辑的

这里怎么了?在


Tags: keynoif字典职位elseyes频率
3条回答

正如@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让您知道有问题的代码在哪一行,最好至少发布那一行代码。在

您要使用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])

第一部分:

^{pr2}$

将从字典psHpGrp中获取键str(f[1]) + str(f[7])的对象,如果它不存在,则创建一个新的Counter。在

然后它将.update([f[6] == 1])与条件f[6] == 1的结果一起,它可以是True或{}。Counter包含True和{}的数目作为字典。它们代表你的"Yes"/"No",只是它们是布尔人。在

相关问题 更多 >