【问题标题】:How to find all keys within a dictionary which contains only ALL values from a list如何在仅包含列表中所有值的字典中查找所有键
【发布时间】:2018-07-09 06:36:25
【问题描述】:

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

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

使用这个例子,我想得到的只是键'lara',它是唯一一个包含list1中列出的所有值的键。我已经疯狂地寻找解决这个问题的方法,但到目前为止,我一无所获,也无法让它为我自己工作。

欢迎任何帮助

【问题讨论】:

  • 你可以使用集合和函数issubset
  • 嗯 - 您得出的解决方案是什么问题?它在哪里?为什么你用它作为变量名来隐藏内置的dict?
  • dict 的关闭标记丢失!请谨慎分享代码的完整部分!

标签: python list dictionary filter key


【解决方案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】:

    使用集合而不是列表。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

        • 这完全解决了我的问题¡¡¡非常感谢
        猜你喜欢
        • 1970-01-01
        • 2012-12-18
        • 1970-01-01
        • 2013-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-10
        • 1970-01-01
        相关资源
        最近更新 更多