Python中用字典构造方法与属性:多字典循环报错求解
问题原因
你犯了一个常见错误:把字典的名称(字符串)存入了users_list,而非字典对象本身。
比如你可能写了类似这样的错误代码:
user_one = {"username": "u1", "user_email": "u1@test.com", "displayname": "User1"} user_two = {"username": "u2", "user_email": "u2@test.com", "displayname": "User2"} user_three = {"username": "u3", "user_email": "u3@test.com", "displayname": "User3"} # 错误:存的是字符串,不是字典对象 users_list = ["user_one", "user_two", "user_three"] for user in users_list: # 此时user是字符串"user_one",尝试user["username"]会触发索引错误 pv = print_values(user["username"], user["user_email"], user["displayname"]) pv.printing_content()
循环时user是字符串类型,而字符串只能用整数索引访问单个字符,用字典键的方式自然会抛出TypeError: string indices must be integers。
正确实现方式
直接把字典对象存入列表,循环时遍历字典,从中提取对应属性值实例化类即可:
class print_values: def __init__(self, username, user_email, displayname): self.username = username self.user_email = user_email self.displayname = displayname def printing_content(self): print(f"用户名:{self.username},邮箱:{self.user_email},显示名:{self.displayname}") # 定义用户字典 user_one = {"username": "u1", "user_email": "u1@test.com", "displayname": "User1"} user_two = {"username": "u2", "user_email": "u2@test.com", "displayname": "User2"} user_three = {"username": "u3", "user_email": "u3@test.com", "displayname": "User3"} # 正确:存入字典对象 users_list = [user_one, user_two, user_three] # 遍历处理每个字典 for user_dict in users_list: pv = print_values( username=user_dict["username"], user_email=user_dict["user_email"], displayname=user_dict["displayname"] ) pv.printing_content()
优化写法
还可以修改类的__init__方法,直接接收字典参数,简化代码:
class print_values: def __init__(self, user_dict): self.username = user_dict["username"] self.user_email = user_dict["user_email"] self.displayname = user_dict["displayname"] def printing_content(self): print(f"用户名:{self.username},邮箱:{self.user_email},显示名:{self.displayname}") # 遍历代码更简洁 for user_dict in users_list: pv = print_values(user_dict) pv.printing_content()
内容的提问来源于stack exchange,提问作者Ramesh Thiyagarajan
相关产品推荐
相关产品推荐

