3

考虑这种字典格式。

{1:{'name':'chrome', 'author':'google', 'url':'http://www.google.com/' },
 2:{'name':'firefox','author':'mozilla','url':'http://www.mozilla.com/'}}

我想删除所有具有相同名称和作者的项目。

我可以通过将所有键放在一个集合中轻松地删除基于键的重复条目,并且可能将其扩展为对特定值起作用,但这似乎是一个昂贵的操作,它会多次迭代字典。我不知道如何以有效的方式使用两个值来做到这一点。这是一本包含数千个项目的字典。

4

2 回答 2

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']))
于 2010-11-05T10:20:01.647 回答
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])
于 2010-11-05T10:27:36.160 回答