如果一个值出现多次,从列表中移除两个项(Python)

2 投票
1 回答
1096 浏览
提问于 2025-04-17 05:47

Python: 如何从列表中删除所有重复项

大家好

我有一个包含(文件,inode,图像,哈希)元组的列表。如果它们的哈希值相同,我需要删除这两个项目。我编程经验不多,所以如果能给我一些提示,让我知道该往哪个方向找就好了。我已经在网上搜索过,但找到的唯一信息就是这个

到目前为止,我想出了这个(非常笨拙的)解决方案:

        hashlist = {}
        files_tobe_removed = []
        for (file, inode, image, hash) in self.files_for_json:
            hashlist[hash] = 0
        for (file, inode, image, hash) in self.files_for_json:
            hashlist[hash] +=1
        for (k,v) in hashlist.iteritems():
            if v == 2:
                files_tobe_removed.append(k)
        for (file,inode,image,hash) in self.files_for_json:
            if hash in files_tobe_removed:
                path = self.outDir + file
                os.remove(path)
                self.files_for_json.remove((file,inode,image,hash))

任何帮助都将不胜感激。提前谢谢你们!

1 个回答

3
>>> from collections import Counter
>>> L=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,1,2,3]
>>> [k for k,v in Counter(L).items() if v==1]
[7, 8, 9]

为了更清楚地说明:

hash_counter = Counter(x[3] for x in self.files_for_json)
for (file,inode,image,hash) in self.files_for_json:
    if hash_counter[hash]>1:
        # duplicated hash
        ...

撰写回答