我有一个由 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']]
