gpt4 book ai didi

python - 从字典列表中删除重复项(具有唯一值)

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:16 25 4
gpt4 key购买 nike

我有一个字典列表,每个字典都描述一个文件(文件格式、文件名、文件大小……以及文件的完整路径 [始终唯一])。目标是除了一个描述同一文件副本的字典之外的所有字典(我只希望每个文件有一个字典(条目),无论有多少副本。

换句话说:如果 2 个(或更多)dict 仅在一个键(即路径)上不同 - 只保留其中一个)。

例如,这是源列表:

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'}]

最佳答案

使用另一个字典将列表中的字典“忽略”键映射到实际字典。这样,每一种只会保留一个。当然,dict 不可哈希,因此您必须改用(排序的)元组。

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 - 从字典列表中删除重复项(具有唯一值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com