如何在python字典中保留一个项目?

时间:2017-01-12 13:22:56

标签: python dictionary

我有一个字典my_dict和一个令牌my_tok列表,如下所示:

my_dict = {'tutor': 3,
      'useful': 1,
      'weather': 1,
      'workshop': 3,
      'thankful': 1,
      'puppy': 1}

my_tok = ['workshop',
          'puppy']

是否可以保留在my_dict中,只保留my_tok中存在的值而不是弹出其余值? 即,我只需保留workshoppuppy

提前致谢!

3 个答案:

答案 0 :(得分:2)

只是像这样覆盖它:

my_dict = {k:v for k, v in my_dict.items() if k in my_tok}

这是dictionary comprehension,只使用my_dict列表中作为条目的密钥重新创建my_tok

如评论中所述,如果my_tok列表中的元素数量与字典键相比较小,则此解决方案不是最有效的解决方案。在这种情况下,迭代my_tok列表会更好,如下所示:

my_dict = {k:my_dict.get(k, default=None) for k in my_tok}

这或多或少是其他答案提出的。唯一的区别是使用.get字典方法允许我们不关心密钥是否存在于字典中。如果不是,则会为其分配默认值。

答案 1 :(得分:2)

查看my_tok中的值,并获取原始词典中的结果。

my_dict = {i:my_dict[i] for i in my_tok}

答案 2 :(得分:2)

创建新副本

您只需覆盖原始字典:

new_dic = {token:my_dict[key] for key in my_tok if key in my_dict}

请注意,您构建了一个 new 字典(也许您可以立即将其写入my_dict),但这会产生影响:对字典的其他引用不会反映此更改。

由于令牌(my_tok)的数量有限,因此最好迭代这些令牌并对字典进行包含检查(而不是循环原始字典中的元组)。 / p>

更新原始词典

如果您希望让更改反映在原始字典中,您可以在第二步中.clear()原始字典并.update()相应地:

new_dic = {token:my_dict[key] for key in my_tok if key in my_dict}
my_dict.clear()
my_dict.update(new_dic)