首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除列表中的字典元素?

如何删除列表中的字典元素?
EN

Stack Overflow用户
提问于 2021-11-05 07:59:55
回答 5查看 119关注 0票数 1

列表中有一些字典:

代码语言:javascript
复制
a = [{1: 2}, {1: 3}, {2: 5}, {2: 3}]

本词典中的所有键和值都是int类型,有些字典有相同的键,我想保留那些键相同、值比其他字典大的字典,我怎么做呢?示例:我想获得以下列表:

代码语言:javascript
复制
[{1: 3}, {2: 5}]
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-11-05 08:12:18

假设每个字典只有一个键/值对,下面是一个可能的解决方案。基本上,创建一个新的字典来跟踪每个键的最大值。然后,把这个变成最后的清单。

代码语言:javascript
复制
def remove_duplicates(dicts):
    merged = {}
    for d in dicts:
        key, value = list(d.items())[0]
        if key not in merged:
            merged[key] = value
        else:
            merged[key] = max(
                merged[key], value
            )
    return [
        {key: value}
        for key, value in merged.items()
    ]
票数 1
EN

Stack Overflow用户

发布于 2021-11-05 08:57:44

使用collections.defaultdict的简单方法

代码语言:javascript
复制
from collections import defaultdict

a = [{1: 2}, {1: 3}, {2: 5}, {2: 3}]

temp = defaultdict(lambda: float("-inf"))
for item in a:
    [(i, v)] = item.items()
    temp[i] = max(v, temp[i])

res = [{i: v} for i, v in temp.items()]
print(res)

输出

代码语言:javascript
复制
[{1: 3}, {2: 5}]

在代码中,表达式float("-inf")作为比较的无界下限值,这意味着:

代码语言:javascript
复制
float("-inf") < x

对于x的任何值,除非xfloat("nan")float("-inf")本身。在here中阅读更多内容。

在每个第一次调用为给定的temp[i]设置i之后,该值将是第一个出现的v

票数 2
EN

Stack Overflow用户

发布于 2021-11-05 08:23:03

代码语言:javascript
复制
a = [{1: 2}, {1: 3}, {2: 5}, {2: 3}]

output = {}

for d in a:
    k = list(d.keys())[0]
    v = list(d.values())[0]
    if k not in output.keys():
        output[k] = v
    else:
        if output[k] < v:
            output[k] = v

output = [{k:v} for k, v in output.items()]

print(output)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69850096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档