You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:20:31