我如何在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']}