在Python中从嵌套字典中删除相同值的重复条目

3 投票
2 回答
1390 浏览
提问于 2025-04-16 06:36

考虑一下这个字典格式。

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

我想要删除所有名字和作者都相同的条目。

我可以通过把所有的键放到一个集合里,轻松地删除重复的条目,也许还可以扩展这个方法来处理特定的值,但这样做似乎会很耗时,因为需要多次遍历字典。我不知道怎么才能高效地用两个值来做到这一点。这个字典里有成千上万的条目。

2 个回答

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])
3

遍历这个字典,边走边记录遇到的 (名字, 作者) 组合,并把已经遇到过的组合去掉:

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']))

撰写回答