如何在只包含lis中所有值的字典中查找所有键

2024-05-15 14:11:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手。我目前正在编写一个脚本,过滤求职者使用的编程语言。我有一本字典,里面有每个候选人(关键字)和她的语言(值)。我只想在字典中查找其值包含列表中包含的所有项的键。例如:

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

使用这个示例,我只想得到键'lara',它是唯一一个包含list1中列出的所有值的键。我拼命地寻找这个问题的解决办法,但到目前为止,我什么也没找到,也没能使它对我自己起作用。你知道吗

欢迎任何帮助


Tags: 脚本语言列表net字典关键字john编程语言
3条回答

使用列表理解和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)

使用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)}

相关问题 更多 >