如果键值对与另一个字典相同,如何删除整个字典

时间:2021-02-02 05:23:59

标签: python python-3.x

如果字典中的一个值与另一个字典相同,你们会如何创建一个脚本来删除整个字典?

dict_1 = {'_id': {'$oid': 'hi'}, 'navigator': {'CodeName': 'Web', 'appName': 'Netscape'}}
dict_2 = {'_id': {'$oid': 'bye'}, 'navigator': {'CodeName': 'Web', 'appName': 'Netscape'}}
dict_3 = {'_id': {'$oid': 'hello'}, 'navigator': {'Name': 'Fire', 'Name': 'scape'}}

list_dict = [dict_1, dict_2, dict_3]

因为 dict_1 和 dict_2 都有 'navigator': {'CodeName': 'Web', 'appName': 'Netscape'}} 我只想要其中之一。所以我想删除这些字典中的一个并保留另一个

我希望我的输出是:

[{'_id': {'$oid': 'hi'}, 'navigator': {'CodeName': 'Web', 'appName': 'Netscape'}}, {'_id': {'$oid': 'hello'}, 'navigator': {'Name': 'Fire', 'Name': 'scape'}}]
# [dict_1, dict_3]

2 个答案:

答案 0 :(得分:1)

假设词典的名称始终为 dict_n,其中 n 的范围从 1 到词典的数量,这就是答案。

另外假设您只对 b 的唯一值感兴趣,下面的代码应该可以工作。

代码:

dict_1 = {'a': 1, 'b': 2}
dict_2 = {'a': 2, 'b': 2}
dict_3 = {'a': 3, 'b': 3}
dict_4 = {'a': 4, 'b': 4}

list_of_dicts = [dict_1,dict_2,dict_3,dict_4]
vals_of_dicts = [list(d.values())[1] for d in list_of_dicts]
x = ['dict '+str(i+1) for i,v in enumerate(vals_of_dicts) if v not in vals_of_dicts[:i]]
print (x)

输出结果为:

['dict 1', 'dict 3', 'dict 4']

但是,如果您确实想从原始列表中删除字典本身,则可以将 x = [....] 代码替换为:

[list_of_dicts.pop(i) for i,v in enumerate(vals_of_dicts) if v in vals_of_dicts[:i]]
print (list_of_dicts)

无需分配给 x。

这将打印出没有b中重复值的实际字典:

[{'a': 1, 'b': 2}, {'a': 3, 'b': 3}, {'a': 4, 'b': 4}]

答案 1 :(得分:0)

为了提供答案,我需要您的问题的更多详细信息:

  1. 什么是dict 1?存在语法错误,因为变量不能是数字
  2. 您的问题不清楚,如果 b 相同,应该保留哪个并且
  3. a 和 b 已使用但未声明。

可以使用 del dict_name 删除字典。

dict1 = {'a': 1, 'b': 2}
del dict1