Python函数groups_per_user报错AttributeError,请求排查解决
问题排查:AttributeError: 'str' object has no attribute 'append'
问题背景
需要实现groups_per_user函数,该函数接收一个存储组名与对应用户列表的字典,返回以用户为键、所属组列表为值的字典。运行代码时触发如下错误:
Error on line 17: "administrator": ["admin"] }))Error on line 8: user_groups[users].append(groups) AttributeError: 'str' object has no attribute 'append'
用户编写的代码:
def groups_per_user(group_dictionary): user_groups = {} for groups, user in group_dictionary.items(): for users in user: if users in user_groups: user_groups[users].append(groups) else: user_groups[users] = groups return(user_groups) print(groups_per_user({"local": ["admin", "userA"], "public": ["admin", "userB"], "administrator": ["admin"] }))
错误原因
问题出在代码的else分支:
else: user_groups[users] = groups
这里直接将字符串类型的groups赋值给了user_groups[users],而不是创建一个包含该组的列表。当后续再次遇到同一个用户(比如示例中的admin),代码会尝试对字符串调用append方法,而字符串没有这个方法,因此触发AttributeError。
修正后的代码
将else分支的赋值改为列表形式即可:
def groups_per_user(group_dictionary): user_groups = {} for groups, users_list in group_dictionary.items(): for user in users_list: if user in user_groups: user_groups[user].append(groups) else: # 初始化为包含当前组的列表 user_groups[user] = [groups] return user_groups print(groups_per_user({"local": ["admin", "userA"], "public": ["admin", "userB"], "administrator": ["admin"] }))
运行结果
执行修正后的代码,会输出预期结果:
{'admin': ['local', 'public', 'administrator'], 'userA': ['local'], 'userB': ['public']}
内容的提问来源于stack exchange,提问作者Strilchukp
相关产品推荐
相关产品推荐

