我有以下初始变量:
secret = {"password": "jdksal",
"user": "fjdklas",
"schema": "jfdaskl"}
pass_words = ['password', 'pass', 'contraseña']
user_words = ['user', 'login', 'username']
如果秘密字典包含任何列表中的键,我想分配变量。所以我会运行这个命令(从如何从字典中获取值,如果它的键可以有几个值):
password, user={k:v for k,v in secret.items() if k in pass_words+user_words}.values()
它工作完美,我得到password
和user
作为字符串。但是,如果我只对一个变量做同样的操作,比如:
password ={k:v for k,v in secret.items() if k in pass_words}.values()
我得到password
为dict_values
类型。为什么呢?
你第一次使用
password, user={k:v for k,v in secret.items() if k in pass_words+user_words}.values()
之所以有效,只是因为字典中碰巧恰好有两个项,而且碰巧它们的顺序是正确的。例如,如果您将secret
更改为
secret = {"user": "fjdklas",
"password": "jdksal"}
它将不再工作。
更好的方法是这样的:
users_and_passwords = [v for k,v in secret.items() if k in pass_words+user_words]
passwords = [v for k,v in secret.items() if k in pass_words]
values()在dict上调用返回dict_values,在你的代码中,结果中正好有两个元素,在等号的左边,三个是两个变量,自动unspack,如果等号左边只有一个变量,它将不unspack
password, user=
你的代码不合理,user_words = ['user', 'login', 'username', 'schema'],更改user_words,再次运行你的代码,你会发现错误