列表中有一些字典:
a = [{1: 2}, {1: 3}, {2: 5}, {2: 3}]本词典中的所有键和值都是int类型,有些字典有相同的键,我想保留那些键相同、值比其他字典大的字典,我怎么做呢?示例:我想获得以下列表:
[{1: 3}, {2: 5}]发布于 2021-11-05 08:12:18
假设每个字典只有一个键/值对,下面是一个可能的解决方案。基本上,创建一个新的字典来跟踪每个键的最大值。然后,把这个变成最后的清单。
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()
]发布于 2021-11-05 08:57:44
使用collections.defaultdict的简单方法
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)输出
[{1: 3}, {2: 5}]在代码中,表达式float("-inf")作为比较的无界下限值,这意味着:
float("-inf") < x对于x的任何值,除非x是float("nan")或float("-inf")本身。在here中阅读更多内容。
在每个第一次调用为给定的temp[i]设置i之后,该值将是第一个出现的v。
发布于 2021-11-05 08:23:03
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)https://stackoverflow.com/questions/69850096
复制相似问题