+-
python – 从字典列表中删除重复项(具有唯一值)
我有一个字典列表,每个字典描述一个文件(文件格式,文件名,文件大小,…和文件的完整路径[始终唯一]).目标是排除描述同一文件副本的所有字典(我只想要每个文件有一个字典(条目),无论有多少副本.

换句话说:如果2个(或更多)dicts仅在单个键(即路径)上有所不同 – 只留下其中一个).

例如,这是源列表:

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'}]
最佳答案
使用另一个字典将列表中的字典映射到实际字典而不使用“忽略”键.这样,每种类型中只保留一种.当然,dicts不可清除,所以你必须使用(排序)元组.

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'}]
点击查看更多相关文章

转载注明原文:python – 从字典列表中删除重复项(具有唯一值) - 乐贴网