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

时间:2018-07-09 06:36:26

标签: python list dictionary filter key

我是python的新手。我目前正在研究一种脚本,该脚本可以过滤求职者所使用的编程语言。我有一本字典,其中包含每个候选项(键)和她的语言(值)。我只想在字典中找到键,这些键的值包含列表中包含的所有项。例如:

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

使用此示例,我要获取的只是键“ lara”,这是唯一包含list1中列出的所有值的键。我一直在疯狂地寻找解决此问题的方法,但到目前为止,我什么都没找到,也没有办法使它对我自己有用。

欢迎任何帮助

4 个答案:

答案 0 :(得分:1)

使用listdict comprehension过滤字典中的元素(以下将dict重命名为dikt以避免与dict类冲突)。如果可迭代的所有元素均为True,则all函数将返回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']}

答案 1 :(得分:1)

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

答案 2 :(得分:0)

使用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']}

答案 3 :(得分:0)

使用集合而不是列表。

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