访问列表中的dict(Python)
以下是我的代码:访问列表中的dict(Python),python,list,dictionary,Python,List,Dictionary,以下是我的代码: user=[] new_user={"User_Name" : input("Choose your Username: "), "Name" : input("Enter your Name: "), "Surname": input("Enter your Surname: "), "Password" : input("Choose your password: "),
user=[]
new_user={"User_Name" : input("Choose your Username: "),
"Name" : input("Enter your Name: "),
"Surname": input("Enter your Surname: "),
"Password" : input("Choose your password: "),
"Birthdate" : input("Enter your Birthdate: "),
"Adress" : input("Enter your adress: "),
"Activity" : input("What's your favorite Activity?: "),
}
user.append(new_user)
我想检查输入的密码是否在列表中,所以我选择:
password = input("Password: ")
if password in user:
print("logged in")
else:
print("log-in failed")
即使我为新用户输入的密码和我为“if condition”检查输入的密码相等,它也不起作用。(我总是得到“登录失败”。)
如果您需要更多信息来帮助我,请告诉我。使用用户[0][“password”]中的
If密码,这将为您提供:
password = input("Password: ")
if password in user[0]["Password"]:
print("logged in")
else:
print("log-in failed")
编辑
使用用户+密码:
users=[]
user_1={
"User_Name" : "a",
"Password" : "aa"
}
users.append(user_1)
user_2={
"User_Name" : "b",
"Password" : "bb"
}
users.append(user_2)
username = input("User name: ")
password = input("Password: ")
logged_in = False
for u in users:
if u["User_Name"] == username and u["Password"] == password:
print("logged in")
logged_in = True
if not logged_in:
print("log-in failed")
解决办法是:
password = input("Password: ")
if password == user[0]["Password"]:
print("logged in")
else:
print("log-in failed")
检查用户中的密码时,只需检查密码是否在字典键中(即“用户名”
,“姓名”
,“姓氏”
,…)
相关行:if password in[user[“password”]for user in users]
我假设您不需要简单的==
比较,因为您需要if。。在..
中,以下是一个简单的示例,说明如何实现此结果:
users=[]
new_user={"User_Name" : input("Choose your Username: "),
"Name" : input("Enter your Name: "),
"Surname": input("Enter your Surname: "),
"Password" : input("Choose your password: "),
"Birthdate" : input("Enter your Birthdate: "),
"Adress" : input("Enter your adress: "),
"Activity" : input("What's your favorite Activity?: "),
}
users.append(new_user)
print("users list:")
print(users)
def login(password):
for user in users:
if password == user['Password']:
return "logged in"
return "log-in failed"
print("\tTest using wrong password:")
print(login("a_password"))
print("\nTest using good password:")
print(login("test_password"))
输出
users list:
[{'Activity': 'my_activity', 'Surname': 'my_surname', 'User_Name': 'my_username', 'Adress': 'my_address', 'Birthdate': 'my_birthdate', 'Name': 'my_name', 'Password': 'my_password'}]
Test using wrong password:
log-in failed
Test using good password:
logged in
解释
要访问用户密码,您需要考虑到您正在建立一个用户列表。
如果您想更好地理解我所说的可视化数据,请仔细阅读输出中的打印(用户)
结果。
要访问特定用户的密码迭代是必需的,这就是为什么我在登录函数中使用for循环。
一旦我有了用户(user1、user2、user3…),就可以很容易地访问其密码字段,并使用user['password']检查它是否与输入匹配
注意
我还建议在中使用==而不是,因为:
“米奇老鼠”中的“米奇”将被评估为真的
“mickey”中的“mickey”将被评估为真
“mickey”==“mickey”
将评估为真(必须是100%匹配)
“mickey”==“mickey mouse”
将计算为false如果条件未解析为True,因为您正在检查字典列表中是否包含字符串。它永远是假的。
users list:
[{'Activity': 'my_activity', 'Surname': 'my_surname', 'User_Name': 'my_username', 'Adress': 'my_address', 'Birthdate': 'my_birthdate', 'Name': 'my_name', 'Password': 'my_password'}]
Test using wrong password:
log-in failed
Test using good password:
logged in
假设用户列表最终会增长到大于1项。那么最好的方法就是这样做:
logged_in=False
对于用户中的dic:
如果dic['Password']==密码:
已登录=真
如果已登录,请执行以下操作:
打印(“登录”)
其他:
打印(“登录失败”)
如果用户[0]中有密码['password']
?。。若你们在列表中有多个条目,那个么这将不能正常工作。谢谢。已经修好了汉克斯,这是解决我问题的完美方法。谢谢你帮助一个新手!我以前已经尝试过这个方法,但当我改变一些东西(我只是添加了几个用户)时,我总是必须使用我创建的最后一个用户的密码。谢谢你帮助我!如果您有多个用户,那么您应该要求的不仅仅是密码。我建议您询问用户名
+密码
(请参见我编辑的答案)这是可行的,很像@Chief Oye的答案,带有布尔检查。是的,对于多个用户,我需要检查的不仅仅是密码,但我试图得到一个简单的答案/简短的答案,只针对这个问题(因此我可以考虑一下自己,并得到检查用户名等的解决方案)。但是我真的很感谢你在帮助我方面所做的努力。我刚刚尝试过这个,正如我所期望的,它只适用于一个用户(基本上是第一个用户)。当我添加了更多的用户时,我总是不得不使用(或者更多的人可以使用)我第一次键入的密码。如果我想有一个主密码,这个解决方案效果很好,所以随着我的程序越来越大,我将使用它。谢谢你的贡献!