gpt4 book ai didi

python-3.x - 筛选具有较高键值的字典列表删除重复的字典

转载 作者:行者123 更新时间:2023-12-03 19:48:50 26 4
gpt4 key购买 nike

我有字典列表,如:

sel_list = [{'a': 8}, {'a': 4}, {'a': 4}, {'b': 8}, {'b': 9}]

我想删除重复的字典,如果多个字典具有相同的键但不同的值,则选择具有更高值的字典。

喜欢 :
sel_list = [{'a': 8}, {'b': 9}]

我试过了:
[i for n, i in enumerate(sel_list) if i not in sel_list[n + 1:]]

其结果是:
[{'a': 8}, {'a': 4}, {'b': 8}, {'b': 9}]

我可以做些什么来实现我的结果?

最佳答案

我们可以通过构建一个字典来做到这一点,该字典通过每次选择最大值来“折叠”值。喜欢:

dummy = object()
maximums = {}
for subd in sel_list:
for k, v in subd.items():
cur = maximums.get(k, dummy)
if cur is dummy or v > cur:
maximums[k] = v
result = [{k: v} for k, v in maximums.items()]

因此,我们遍历列表中字典的键值对,每次更新 maximums如果键尚不存在或当前值小于字典。

在这个迭代步骤之后,我们生成一个具有最大键值对的字典列表。

这种方法适用于所有可以排序的类型(数字、字符串等),并且键应该是可散列的,但是这个假设成立,因为在字典列表中,键已经被散列了。

此外,它的工作相当健壮,因为它将忽略空字典,并且还将处理具有多个键值对的字典,将它们视为独立的键值对。

您也可以决定与 maximums 合作直接:包含原始列表中所有键的字典,并将这些键与列表中看到的最大值相关联。

关于python-3.x - 筛选具有较高键值的字典列表删除重复的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51740437/

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