如何避免重复添加元素到列表?



我如何在groups_of_files列表中添加唯一的文件路径,同时避免由于循环中的循环而重复?

for file in files_names:
for name_group, formats in groups_of_format.items():
if file.split('.')[-1].upper() in groups_of_format.values():
groups_of_files[groups_of_format.keys()].append(file)

使用集合代替列表。集合中的元素使用散列保持唯一。

类似:

groups_of_files = defaultdict(set)
for file in files_names:
for name_group, formats in groups_of_format.items():
if file.split('.')[-1].upper() in groups_of_format.values():
groups_of_files[groups_of_format.keys()].add(file)

我假设groups_of_files是一个字典。在代码示例中,当字典的元素缺失时,不是引发异常,而是创建元素,并且值是一个空集,您可以将file添加到其中。如果file是自定义类型,请确保定义__hash____eq__方法。

如果最终需要一个列表,可以使用list()和set作为实参将set转换为列表。

您可以使用set来跟踪已经添加到groups_of_files列表中的文件。

added_files = set()
for file in files_names:
for name_group, formats in groups_of_format.items():
if file.split('.')[-1].upper() in formats and file not in added_files:
groups_of_files[name_group].append(file)
added_files.add(file)

建立一个以文件名扩展名为关键字的字典。关联值应该是一个集合。

随后,按照如下方式将集合转换为列表,构建所需的字典:

import os
temp = dict()
files_names = ['a.txt', 'b.txt', 'b.txt', 'c.py', 'e.txt', 'f.py']
for file in files_names:
_, ext = os.path.splitext(file)
temp.setdefault(ext.upper()[1:], set()).add(file)
groups_of_files = {k: list(v) for k, v in temp.items()}
print(groups_of_files)

输出:

{'TXT': ['e.txt', 'b.txt', 'a.txt'], 'PY': ['c.py', 'f.py']}

最新更新