【发布时间】:2021-03-04 09:17:30
【问题描述】:
我有以下初始变量:
secret = {"password": "jdksal",
"user": "fjdklas",
"schema": "jfdaskl"}
pass_words = ['password', 'pass', 'contraseña']
user_words = ['user', 'login', 'username']
如果秘密字典包含任何列表中的密钥,我想分配变量。所以我会运行这个命令(从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()
它运行良好,我将password 和user 作为字符串。但是,如果我只对一个变量做同样的事情,比如:
password ={k:v for k,v in secret.items() if k in pass_words}.values()
我得到password 作为类型dict_values。这是为什么呢?
【问题讨论】:
-
因为
.values()在字典上调用返回dict_values。你为什么期待一个字符串? -
.values()的返回类型没有改变,但您已经改变了存储它的方式。 -
您第一次使用
password, user = ...似乎过于复杂;我不太确定你想在那里做什么,但肯定不清楚,应该做得更简单。一旦这样做,您的实际问题也可能会得到解决。 -
你没有得到字符串:你得到的是
dict_values。你可以解包,这就是你在第一个例子中所做的:你自动将dict_values解包成密码和用户。 如果存在第三个值(例如,架构也包含在内),您会收到错误消息:ValueError: too many values to unpack (expected 2)。因此,在您的工作示例中,您或多或少是“幸运的”。 -
我认为您的链接问题中接受的答案太复杂了;考虑下面 Amir 的回答,它消除了整个
.values()的东西,并使事情变得更简单、更容易阅读。
标签: python dictionary dictionary-comprehension