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=