我有一个字典列表,每个字典都描述一个文件(文件格式,文件名,文件大小,以及文件的完整路径[始终唯一])。目标是排除描述同一文件副本的除一个字典以外的所有字典(我只希望每个文件有一个字典(条目),无论有多少个副本。
换句话说:如果2个(或更多)字典仅在单个键(即path)中不同,则仅保留其中之一。
例如,这是源列表:
src_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/mydir'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
结果应如下所示:
dst_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
使用另一个字典将列表中的字典映射到实际的字典,而无需使用“ ignored”键。这样,将仅保留每种中的一种。当然,字典是不可散列的,因此您必须使用(排序的)元组。
src_list = [{'filename': 'abc', 'filetype': '.txt', 'path': 'C:/'},
{'filename': 'abc', 'filetype': '.txt', 'path': 'C:/mydir'},
{'filename': 'def', 'filetype': '.zip', 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', 'path': 'C:/mydir2'}]
ignored_keys = ["path"]
filtered = {tuple((k, d[k]) for k in sorted(d) if k not in ignored_keys): d for d in src_list}
dst_lst = list(filtered.values())
结果是:
[{'path': 'C:/mydir', 'filetype': '.txt', 'filename': 'abc'},
{'path': 'C:/mydir2', 'filetype': '.zip', 'filename': 'def'}]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句