gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:45 25 4
gpt4 key购买 nike

我有一个由 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']]你能给我一些关于如何做到这一点的提示吗?

最佳答案

你可以使用 setdefaultdict :

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

关于python - 使用条件删除列表列表中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52337617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com