代码之家  ›  专栏  ›  技术社区  ›  user479870

在Python中,如果两个值相同,则从嵌套字典中删除重复项

  •  3
  • user479870  · 技术社区  · 15 年前

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

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

    通过将所有键放在一个集合中,我可以很容易地删除基于键的重复项,并且可以将其扩展到一个特定的值上,但这似乎是一个重复字典多次的昂贵操作。我不知道如何有效地利用两个值来实现这一点。这是一本有成千上万条目的字典。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Pär Wieslander    15 年前

    遍历字典,跟踪遇到的 (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']))
    
        2
  •  1
  •   sykora    15 年前

    让我们看看这是否有效。。。

    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])
    
    推荐文章