为什么我得到的是dict_值而不是str?

2024-05-16 07:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下初始变量:

secret = {"password": "jdksal",
          "user": "fjdklas",
          "schema": "jfdaskl"}
pass_words = ['password', 'pass', 'contraseña']
user_words = ['user', 'login', 'username']

如果机密dict包含任何列表中的密钥,我想分配变量。因此,我将运行这个命令(从How to get value from dict if its key can have several values获得):

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

我将password作为类型dict_values。为什么呢


Tags: inforsecretifschemaitemspasspassword
2条回答

对dict调用values()返回dict_值,在代码中,结果中正好有两个元素,在等号左侧,三个是两个变量,自动取消堆栈,如果只有一个变量在等号左侧,它将不会取消堆栈

password, user=

您的代码不合理,user_words=['user','login','username','schema'],更改user_words,再次运行代码,您将发现错误

你第一次使用

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

之所以有效,是因为字典中碰巧正好有两个条目,而且它们的顺序也恰好正确。i、 e.如果您将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]

相关问题 更多 >