Python在特定键的值重复时删除字典项
我有一本这样的字典:Python在特定键的值重复时删除字典项,python,Python,我有一本这样的字典: nodes = [ {"name": n1, "nodename": nod1, "nodetype": t1, "nodeip": nip1}, {"name": n2, "nodename": nod2, "nodetype": t2, "nodeip": nip2}, {"name": n3, "nodename": nod3, "nodetype": t1, "nodeip": nip3}, {"name": n4, "nodena
nodes = [
{"name": n1, "nodename": nod1, "nodetype": t1, "nodeip": nip1},
{"name": n2, "nodename": nod2, "nodetype": t2, "nodeip": nip2},
{"name": n3, "nodename": nod3, "nodetype": t1, "nodeip": nip3},
{"name": n4, "nodename": nod4, "nodetype": t3, "nodeip": nip4},
{"name": n5, "nodename": nod5, "nodetype": t2, "nodeip": nip5},
]
我想删除在“节点类型”中具有重复值的所有键,例如:
选择n1、n3或n2、n5中的哪一个并不重要。 我怎样才能得到上述结果 我试着迭代如下值:
seen = set()
uniq_nodes_per_type = {}
for node in node_list.items():
nodetype = node["nodetype"]
if nodetype not in seen:
seen.add(nodetype)
uniq_nodes.update(node)
假设您的输入是一个目录列表:
nodes = [
{"name": "n1", "nodename": "nod1", "nodetype": "t1", "nodeip": "nip1"},
{"name": "n2", "nodename": "nod2", "nodetype": "t2", "nodeip": "nip2"},
{"name": "n3", "nodename": "nod3", "nodetype": "t1", "nodeip": "nip3"},
{"name": "n4", "nodename": "nod4", "nodetype": "t3", "nodeip": "nip4"},
{"name": "n5", "nodename": "nod5", "nodetype": "t2", "nodeip": "nip5"},
]
基于nodetype
键构建字典将删除重复项:
nodetype_dict = {x["nodetype"]: x for x in nodes}
sorted(nodetype_dict.values(), key=lambda x: x["nodetype"])
[{'name': 'n3', 'nodeip': 'nip3', 'nodename': 'nod3', 'nodetype': 't1'},
{'name': 'n5', 'nodeip': 'nip5', 'nodename': 'nod5', 'nodetype': 't2'},
{'name': 'n4', 'nodeip': 'nip4', 'nodename': 'nod4', 'nodetype': 't3'}]
字典不能有重复的键。因此,您的示例无效,请重新检查dict列表?maybeYes,我更新了dict,它错了。预期的输出是什么?您要保留的复制目录中的哪一个并不重要,将选择n1、n3或n2、n5中的哪一个。
nodetype_dict = {x["nodetype"]: x for x in nodes}
sorted(nodetype_dict.values(), key=lambda x: x["nodetype"])
[{'name': 'n3', 'nodeip': 'nip3', 'nodename': 'nod3', 'nodetype': 't1'},
{'name': 'n5', 'nodeip': 'nip5', 'nodename': 'nod5', 'nodetype': 't2'},
{'name': 'n4', 'nodeip': 'nip4', 'nodename': 'nod4', 'nodetype': 't3'}]