簡體   English   中英

使用值在列表字典中查找鍵

[英]Find keys in a dictionary of lists using values

我有一個字典,每個鍵包含多個值。 我想使用其中一個值來獲取與該值關聯的所有鍵。 但是,我的代碼以 null 響應運行。

def dict_keys(my_dict, *vals):
for k, v in my_dict.items():
    if v == ['vals']:
        return key
    else:
        return 'No keys' 
return dict_keys

dict_keys(fruit_dict, '甜瓜', '草莓')

'No keys'

但是我不能在列表中獲取單個值:

for key, value in fruit_dict.items():  
    print(value)
    print(value == 'melon')
 
output:

['melon', 'berry', 'mango']
False
['orange']
False
['lime']
False
['berry', 'watermelon', 'strawberry']
False
['cherry', 'melon']
False

用第二個循環迭代這些值!

for key, fruits in fruit_dict.items():
    for fruit in fruits:
        if fruit == test_fruit:
            ...

或檢查會員資格

for key, fruits in fruit_dict.items():
    if test_fruit in fruits:
        ...
  1. v == [...]不是您檢查v是否是列表中的成員之一的方式。
  2. vals已經是一個列表。 您不需要將其括在方括號中。 無論如何,您的['vals']是一個包含單個字符串的列表——字符串'vals'
  3. 您想要包含水果的所有鍵,因此您需要完成循環並在處理完所有鍵return鍵列表。
  4. 您的函數的返回類型應該是一致的。 要返回沒有任何意義的東西,最好返回None 在這種情況下,因為我們要返回一個列表,所以最好只返回一個空列表。
  5. 你想傳遞一個水果並獲得包含該水果的所有鑰匙。
  6. 我建議您為變量使用描述性名稱。 例如,在for k, v in my_dict.items()中, k, v並沒有真正告訴您這些變量是什么,但是如果您將它們重命名為有意義的名稱,就更容易理解您的代碼的含義正在做。
def dict_keys(my_dict, search_fruit):
    keys = [] # Initialize an empty list
    for person, liked_fruits in my_dict.items():
        if search_fruit in liked_fruits: # Check if the list contains the fruit you're looking for
            keys.append(person)
        else:
            # Do nothing
            pass
    return keys

現在假設你有一個這樣的字典,它告訴你五個人最喜歡的水果,你想找到喜歡甜瓜的人:

fruit_dict = {
 "A": ['melon', 'berry', 'mango'],
 "B": ['orange'],
 "C": ['lime'],
 "D": ['berry', 'watermelon', 'strawberry'],
 "E": ['cherry', 'melon']
}

你會這樣做:

dict_keys(fruit_dict, "melon")

這會給你一個包含兩個鍵的列表:

 ['A', 'E']

您可以使用set.intersection並為自己保存一個嵌套循環:

def keys_with_vals(my_dict, *vals):
    check_vals = set(vals).intersection
    return [k for k, v in my_dict.items() if check_vals(v)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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