如何在python字典中保留项目?
我有一本字典如何在python字典中保留项目?,python,dictionary,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中的值,而不弹出其余值? i、 例如,我只需要保留车间和小狗
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
中的值,而不弹出其余值?
i、 例如,我只需要保留车间
和小狗
提前谢谢 就这样覆盖它:
my_dict = {k:v for k, v in my_dict.items() if k in my_tok}
这是一个仅使用my_-tok
列表中作为条目出现的键重新创建my_-dict
正如评论中所说,如果my_tok
列表中的元素数与字典键相比很小,那么这个解决方案不是最有效的。在这种情况下,最好通过my_tok
列表进行迭代,如下所示:
my_dict = {k:my_dict.get(k, default=None) for k in my_tok}
这或多或少是其他答案的建议。唯一的区别是使用dictionary方法,它允许我们不关心字典中是否存在密钥。如果不是,它将被指定为默认值。检查
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)
我想交换迭代器和if语句,因为要保留元素检查的键数量非常有限,通常在字典上检查更快。@WillemVanOnsem非常正确。更新了答案hi@willem,谢谢你的回答,我认为应该是
key
而不是token
@Sailesh:你是对的,谢谢你指出这一点。