为什么我得到dict_values而不是str?



我有以下初始变量:

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()

它工作完美,我得到passworduser作为字符串。但是,如果我只对一个变量做同样的操作,比如:

password ={k:v for k,v in secret.items() if k in pass_words}.values()

我得到passworddict_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,再次运行你的代码,你会发现错误

相关内容

  • 没有找到相关文章