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

嵌套字典成员运算符使用问题:登录系统用户名校验报错

问题解决:嵌套字典中校验用户名的错误修复

错误原因

你遇到的AttributeError: 'dict_values' object has no attribute 'keys'是因为user.values()返回的是dict_values对象,它是外层字典所有内层字典的集合,不是单个字典,所以没有keys()方法,直接调用自然会报错。

修复方案

这里提供几种简单有效的方法来校验用户名是否存在于嵌套字典中:

方法1:用生成器表达式遍历所有用户名

写法简洁,无需额外创建列表:

user = {
  "admin" : {"alex" : "1234", "phil" : "3453", "peter" : "23423", "lucas" : "12133"},
  "student" : {"tanishk" : "23423", "sanskar" : "7445", "shashwat" : "5573", "ayush" : "96456"}
}

uname = input("Enter your username : ").lower()

# 遍历所有内层字典的键,判断用户名是否存在
if uname in (name for inner_dict in user.values() for name in inner_dict):
  print("Hello")

方法2:先收集所有用户名到列表再判断

适合需要多次复用用户名列表的场景:

user = {
  "admin" : {"alex" : "1234", "phil" : "3453", "peter" : "23423", "lucas" : "12133"},
  "student" : {"tanishk" : "23423", "sanskar" : "7445", "shashwat" : "5573", "ayush" : "96456"}
}

uname = input("Enter your username : ").lower()

# 收集所有用户名
all_usernames = []
for inner_dict in user.values():
    all_usernames.extend(inner_dict.keys())

if uname in all_usernames:
  print("Hello")

方法3:用any()函数高效判断(推荐)

any()会在找到第一个匹配项后立即停止遍历,性能更优:

user = {
  "admin" : {"alex" : "1234", "phil" : "3453", "peter" : "23423", "lucas" : "12133"},
  "student" : {"tanishk" : "23423", "sanskar" : "7445", "shashwat" : "5573", "ayush" : "96456"}
}

uname = input("Enter your username : ").lower()

# 只要有一个内层字典包含该用户名就返回True
if any(uname in inner_dict for inner_dict in user.values()):
  print("Hello")

进阶:完整的登录校验逻辑

如果要完成完整的登录(校验用户名+密码),可以这样写:

user = {
  "admin" : {"alex" : "1234", "phil" : "3453", "peter" : "23423", "lucas" : "12133"},
  "student" : {"tanishk" : "23423", "sanskar" : "7445", "shashwat" : "5573", "ayush" : "96456"}
}

uname = input("Enter your username : ").lower()
pwd = input("Enter your password: ")

# 遍历用户类型和对应的字典
for user_type, inner_dict in user.items():
    if uname in inner_dict:
        if inner_dict[uname] == pwd:
            print(f"Welcome back, {uname}! You're logged in as {user_type}")
        else:
            print("Password is incorrect.")
        break
else:
    # 循环正常结束(没找到匹配的用户名)
    print("Username not found.")

内容的提问来源于stack exchange,提问作者Tanishk Raikwar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:50:29