簡體   English   中英

如果 dict 的鍵可以有多個值,如何從 dict 中獲取值

[英]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_wordsecret之間有多個重疊, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM