如何在python字典中保留项目



我有一个字典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.

提前感谢!

只需像这样覆盖它:

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

这是一种字典理解,它仅使用作为my_tok列表中的条目存在的键重新创建my_dict

如评论中所述,如果my_tok列表中的 elemenst 数量与字典键相比很少,则此解决方案不是最有效的解决方案。在这种情况下,最好按如下方式遍历my_tok列表:

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

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

遍历my_tok中的值,并得到原始字典中的结果。

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

创建新副本

您可以简单地覆盖原始字典:

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

但是请注意,您构建了一个新的字典(也许您立即将其写给my_dict),但这具有含义:对字典的其他引用不会反映此更改。

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

更新原始词典

如果您希望更改反映在原始词典中,您可以在第二步中.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)

最新更新