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

Python 为什么我得到的是dict_值而不是str?,python,dictionary,dictionary-comprehension,Python,Dictionary,Dictionary Comprehension,我有以下初始变量: secret = {"password": "jdksal", "user": "fjdklas", "schema": "jfdaskl"} pass_words = ['password', 'pass', 'contraseña'] user_words = ['user', 'login', 'username

我有以下初始变量:

secret = {"password": "jdksal",
          "user": "fjdklas",
          "schema": "jfdaskl"}
pass_words = ['password', 'pass', 'contraseña']
user_words = ['user', 'login', 'username']
如果机密dict包含任何列表中的密钥,我想分配变量。因此,我将运行此命令(从以下位置获得):

它工作得很好,我将
密码
用户
作为字符串。但是,如果我只对一个变量执行相同的操作,如:

password ={k:v for k,v in secret.items() if k in pass_words}.values()
我获得
密码
作为类型
dict\u值
。为什么会这样?

您第一次使用

password, user={k:v for k,v in secret.items() if k in pass_words+user_words}.values()
之所以有效,是因为字典中碰巧正好有两个条目,而且它们的顺序也恰好正确。i、 e.如果您将
密码更改为

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

password, user=

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

,因为对dict调用
.values()
会返回
dict_值
。为什么需要字符串呢?
.values()
的返回类型没有改变,但是您已经改变了存储它的方式。您第一次使用
密码,user=…
似乎过于复杂;我真的不确定你想在那里做什么,但它肯定不清楚,应该做得更简单。一旦这样做,您的实际问题也可能得到解决。您得到的不是字符串:而是
dict_值。您可以将其解包,这就是第一个示例中的操作:您自动将
dict_值
解包到密码和用户中。如果有第三个值(例如,还包含了架构),您将得到一个错误:
ValueError:要解压缩的值太多(预期为2)
。因此,在你的工作示例中,你或多或少是“幸运”的。我认为你的链接问题中被接受的答案太复杂了;考虑下面的阿米尔的答案,它会消除整个<代码> .Values()/Case>东西,使事情变得更简单和更容易阅读。伟人:)
password, user=