Skip to main content
 首页 » 编程设计

python之使用条件删除列表列表中的重复项

2025年05月04日13artech

我有一个由 2 个元素组成的集合,第一个元素仍然是单词,第二个元素是单词来自的文件,现在我需要将文件名附加到单词,如果词是一样的 例如。 输入([['word1', 'F1.txt'], ['word1', 'F2.txt'], ['word2', 'F1.txt'], ['word2', 'F2. txt'], ['word3', 'F1.txt'], ['word3', 'F2.txt'], ['word4', 'F2.txt']]) 应该输出 [['word1', 'F1.txt', 'F2.txt'], ['word2', 'F1.txt', 'F2.txt'], ['word3', 'F1. txt', 'F2.txt'], ['word4', 'F2.txt']] 你能给我一些关于如何做到这一点的提示吗?

请您参考如下方法:

你可以使用 set和 defaultdict :

from collections import defaultdict 
 
 
def remove_dups_pairs(lst): 
    s = set(map(tuple, lst)) 
    d = defaultdict(list) 
    for word, file in s: 
        d[word].append(file) 
    return [[key] + values for key, values in d.items()] 
 
 
print(remove_dups_pairs([["fire", "elem.txt"], ["fire", "things.txt"], ["water", "elem.txt"], ["water", "elem.txt"], ["water", "nature.txt"]])) 

输出

[['fire', 'elem.txt', 'things.txt'], ['water', 'elem.txt', 'nature.txt']] 

正如@ShmulikA 提到的集合不保留顺序,如果您需要保留顺序,您可以这样做:

def remove_dups_pairs(lst): 
    d = defaultdict(list) 
    seen = set() 
    for word, file in lst: 
        if (word, file) not in seen: 
            d[word].append(file) 
            seen.add((word, file)) 
 
    return [[key] + values for key, values in d.items()] 
 
 
print(remove_dups_pairs([["fire", "elem.txt"], ["fire", "things.txt"], ["water", "elem.txt"], ["water", "elem.txt"], 
                         ["water", "nature.txt"]])) 

输出

[['water', 'elem.txt', 'nature.txt'], ['fire', 'elem.txt', 'things.txt']]