考虑这种字典格式。
{1:{'name':'chrome', 'author':'google', 'url':'http://www.google.com/' },
2:{'name':'firefox','author':'mozilla','url':'http://www.mozilla.com/'}}
我想删除所有具有相同名称和作者的项目。
我可以通过将所有键放在一个集合中来轻松删除基于键的重复条目,并且可以扩展它以处理特定值,但这似乎是一个代价高昂的操作,它多次遍历字典。我不知道如何以有效的方式使用两个值来完成此操作。这是一本包含数千件物品的字典。
答案 0 :(得分:3)
遍历字典,跟踪遇到的(name, author)
元组并删除已经遇到的元素:
def remove_duplicates(d):
encountered_entries = set()
for key, entry in d.items():
if (entry['name'], entry['author']) in encountered_entries:
del d[key]
else:
encountered_entries.add((entry['name'], entry['author']))
答案 1 :(得分:1)
让我们看看这是否有效......
from itertools import groupby
def entry_key(entry):
key, value = entry
return (value['name'], value['author'])
def nub(d):
items = d.items()
items.sort(key=entry_key)
grouped = groupby(items, entry_key)
return dict([grouper.next() for (key, grouper) in grouped])