簡體   English   中英

如何在字典中查找僅包含列表中所有值的所有鍵

[英]How to find all keys within a dictionary which contains only ALL values from a list

我是python的新手。 我目前正在研究一種腳本,該腳本可以過濾求職者所使用的編程語言。 我有一本字典,其中包含每個候選項(鍵)和她的語言(值)。 我只想在字典中找到鍵,這些鍵的值包含列表中包含的所有項。 例如:

list1 = ['php', 'net']
dict  = {
    'lara': ['net', 'php', 'python'], 
    'john': ['php', 'c++'], 
    'ian' : ['php','python']}

使用此示例,我想獲得的只是鍵“ lara”,這是唯一包含list1中列出的所有值的鍵。 我一直在瘋狂地尋找解決此問題的方法,但到目前為止,我什么都沒找到,也沒有辦法使它對我自己有用。

任何幫助都將受到歡迎

使用列表理解和all

list1 = ['php', 'net']
d = {'lara': ['net', 'php', 'python'], 'john': ['php', 'c++'], 'ian': ['php','python']}
print([k for k,v in d.items() if all(i in v for i in list1)])

輸出:

['lara']

擴展版本。

res = []
for k,v in d.items():
    if all(i in v for i in list1):
        res.append(k)

使用列表字典理解來過濾字典中的元素(以下將dict重命名為dikt以避免與dict類沖突)。 all函數返回True ,如果迭代的所有元素都是True

list1 = ['php', 'net']
dikt = {'lara': ['net', 'php', 'python'], 'john': ['php', 'c++'], 'ian': ['php','python']}

# Matching keys as a list:

[k for k,v in dikt.items() if all(x in v for x in list1)]
# ['lara']

# Matching entries returned as a dict:

{k:v for k,v in dikt.items() if all(x in v for x in list1)}
# {'lara': ['net', 'php', 'python']}

使用set.isubset方法查找給定集合是否為列表的子集

list1=['php', 'net']
dict1={'lara': ['net', 'php', 'python'], 'john': ['php', 'c++'], 'ian': ['php','python']}
set1=set(list1)
{k:v for k,v in dict1.items() if set1.issubset(v)}
# {'lara': ['net', 'php', 'python']}

使用集合而不是列表。

set1 = {'php', 'net'}
dict1 = {'lara': ['net', 'php', 'python'], 'john': ['php', 'c++'], 'ian': ['php','python']}
{k: v for k,v in dict1.items() if set1.issubset(v)}

暫無
暫無

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

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