【问题标题】:Filter dictionary based on list of keys [duplicate]根据键列表过滤字典[重复]
【发布时间】:2020-09-11 17:49:03
【问题描述】:

我有一本字典d = {'key1' : 1, 'key2' : 2, 'key3' : 3} 和一个列表lst = ['key1','key2']

如何过滤字典以仅包含列表中的键,以便获得d = {'key1' : 1, 'key2' : 2}

【问题讨论】:

    标签: python list dictionary join filter


    【解决方案1】:

    简单地说:

    d2 = {k:d[k] for k in lst}
    

    但所有键都必须存在于源目录中。如果没有:

    d2 = {k:d[k] for k in lst if k in d}
    

    【讨论】:

    • 这是最优雅和最快的解决方案,但只有在lst 中的每个元素也是一个键时才有效。从 OP 我不清楚是否是这种情况。
    【解决方案2】:
    dict(filter(lambda x: x[0] in lst, d.items()))
    

    【讨论】:

      【解决方案3】:

      索洛多洛先生

      试试这个,

      data = [d[k] for k in list]
      

      如果你想从结果中重建字典,你也可以在元组列表中捕获键并转换为字典,例如

      data = dict ([(k, d[k]) for k in list])
      

      【讨论】:

      • 我已经编辑了我的代码。
      • 在第一个结果上,您可以简单地将其转换为字典而不是使用列表。 => data = {d[k] for k in list}.
      【解决方案4】:
      target_set = set(lst)
      d2 = {k:v for k,v in d.items() if k in target_set}
      
      d2
      Out[23]: {'key1': 1, 'key2': 2}
      

      【讨论】:

        猜你喜欢
        • 2015-05-17
        • 2020-02-06
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-11
        • 2018-10-31
        • 1970-01-01
        相关资源
        最近更新 更多