我是python的新手。我目前正在研究一种脚本,该脚本可以过滤求职者所使用的编程语言。我有一本字典,其中包含每个候选项(键)和她的语言(值)。我只想在字典中找到键,这些键的值包含列表中包含的所有项。例如:
list1 = ['php', 'net']
dict = {
'lara': ['net', 'php', 'python'],
'john': ['php', 'c++'],
'ian' : ['php','python']}
使用此示例,我要获取的只是键“ lara”,这是唯一包含list1中列出的所有值的键。我一直在疯狂地寻找解决此问题的方法,但到目前为止,我什么都没找到,也没有办法使它对我自己有用。
欢迎任何帮助
答案 0 :(得分:1)
使用list或dict 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)}