[英]How to get value from dict if its key can have several values
我有一個帶有如下憑據的字典:
secret = {"password": "jdksal",
"user": "fjdklas",
"schema": "jfdaskl"}
我想為密碼、用戶和架構創建一個變量。 但是,秘密字典可以為每個鍵具有其他值,因此我將列出命名元素的可能方式,如下所示:
pass_words = ['password', 'pass', 'contraseña']
因此,當字典中存在列表pass_words
的任何鍵時,將創建變量密碼。 字典中只有一個來自 pass_words 的單詞。 與用戶、架構等相同。到目前為止,我有以下代碼:
for word in pass_words:
if word in secret:
password = secret[word]
user_words = ['user', 'username', 'login', 'name']
for word in user_words:
if word in secret:
user = secret[word]
它有效,但非常冗長。 有沒有更簡潔的方法來做到這一點? 謝謝
如您所寫,如果pass_word
和secret
之間有多個重疊, password
將獲得最后一個匹配項。 我不知道這是你的意圖。
如果只有一個重疊,您可以使用集合操作:
>>> secret.keys() & pass_words
{'password'}
>>> secret.keys() & user_words
{'user'}
然后獲取與該鍵關聯的值:
>>> secret[(secret.keys() & pass_words).pop()]
jdksal
>>> secret[(secret.keys() & user_words).pop()]
fjdklas
對於沒有 dict set 視圖的舊 Python,只需將set
應用於每個視圖以獲得相同的結果:
>>> set(secret.keys()) & set(user_words)
{'user'}
使用 Python 3.6+,您可以:
password, user={k:v for k,v in secret.items() if k in pass_words+user_words}.values()
我認為這會更好:
pass_words = ['password', 'pass', 'contraseña']
secret = {"password": pass_words,
"user": "fjdklas",
"schema": "jfdaskl"}
input_password = input("Enter Your Password: ")
for key,value in secret.items():
if input_password in value:
print("Correct Password")
您可以隨意更改輸入法。 鍵變量將保存字典中第一個項目的鍵,值變量將保存字典中第一個項目的值,在您的情況下,這將是一個列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.