如果字典中的一个值与另一个字典相同,你们会如何创建一个脚本来删除整个字典?
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]
答案 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)
为了提供答案,我需要您的问题的更多详细信息:
dict 1
?存在语法错误,因为变量不能是数字可以使用 del dict_name
删除字典。
dict1 = {'a': 1, 'b': 2}
del dict1