Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问列表中的dict(Python)_Python_List_Dictionary - Fatal编程技术网

访问列表中的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的答案,带有布尔检查。是的,对于多个用户,我需要检查的不仅仅是密码,但我试图得到一个简单的答案/简短的答案,只针对这个问题(因此我可以考虑一下自己,并得到检查用户名等的解决方案)。但是我真的很感谢你在帮助我方面所做的努力。我刚刚尝试过这个,正如我所期望的,它只适用于一个用户(基本上是第一个用户)。当我添加了更多的用户时,我总是不得不使用(或者更多的人可以使用)我第一次键入的密码。如果我想有一个主密码,这个解决方案效果很好,所以随着我的程序越来越大,我将使用它。谢谢你的贡献!