gpt4 book ai didi

python - 如何从 Python 列表中删除重复的字典?

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

我有一个按特定键排序的字典列表。每个字典包含 32 个元素,列表中有 4000 多个字典。我需要代码来处理列表并返回一个删除了所有重复项的新列表。

来自这些链接的方法:

不要帮我,因为字典是不可散列的。

有什么想法吗?如果您需要更多信息,请发表评论,我会添加信息。

编辑:

重复字典可以是 list[dictionary][key] 具有相同值的任意两个字典。


好了,这里给需要的人详细解释一下。

我有一个这样的字典列表:

[ {
"ID" : "0001",
"Organization" : "SolarUSA",
"Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Timothy Black",
}, {
"ID" : "0002",
"Organization" : "SolarUSA",
"Matchcode" : "SolarUSA, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Johen Wilheim",
}, {
"ID" : "0003",
"Organization" : "Zapotec",
"Matchcode" : "Zapotec, Something Street, Somewhere State, Whatev Zip",
"Owner" : "Simeon Yurrigan",
} ]

在这个列表中,第一个和第二个字典是重复的,因为它们的Matchcodes 是相同的。

现在这个列表按以下代码排序:

# sort_by is "Matchcode"
def sort( list_to_be_sorted, sort_by ):
return sorted(list_to_be_sorted, key=lambda k: k[sort_by])

所以我有一个按Matchcode 排序的整洁的字典列表。现在我只需要遍历列表,访问 list[dictionary][key] 并在两个键值匹配时删除重复项。

最佳答案

正如您可以使用 tuple 来获得与 list 等效的可散列值一样,您可以使用 frozenset 来获得可散列等效值到 dict。唯一的技巧是您需要将 d.items() 而不是 d 传递给构造函数。

>>> d = {'a': 1, 'b': 2}
>>> s = frozenset(d.items())
>>> hash(s)
-7588994739874264648
>>> dict(s) == d
True

然后您可以使用您最喜欢的您已经见过的解决方案。将它们转储到 set 中,或者如果您需要保留顺序等,则使用 OrderedSetunique_everseen 配方等。例如:

>>> unique_sets = set(frozenset(d.items()) for d in list_of_dicts)
>>> unique_dicts = [dict(s) for s in unique_sets]

或者,保留顺序并使用键值:

>>> sets = (frozenset(d.items()) for d in list_of_dicts)
>>> unique_sets = unique_everseen(sets, key=operator.itemgetter(key))
>>> unique_dicts = [dict(s) for s in unique_sets]

当然,如果你有列表或嵌套在其中的字典,你将不得不递归地转换,就像你对列表的列表所做的那样。

关于python - 如何从 Python 列表中删除重复的字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18497973/

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