【发布时间】:2021-05-05 09:46:48
【问题描述】:
我有一个字典列表,例如:
[{1: 0.4, 3: 0.5}, {1: 0.2, 3: 0.9}, {1: 0.3, 3: 0.1}]
我想从每个列表项中找到第一个键 (1) 和第二个键 (3) 的最大值
-> key(1) 的最大值为 0.4
-> key(3) 的最大值为 0.9
我该怎么做?
【问题讨论】:
我有一个字典列表,例如:
[{1: 0.4, 3: 0.5}, {1: 0.2, 3: 0.9}, {1: 0.3, 3: 0.1}]
我想从每个列表项中找到第一个键 (1) 和第二个键 (3) 的最大值
-> key(1) 的最大值为 0.4
-> key(3) 的最大值为 0.9
我该怎么做?
【问题讨论】:
您应该将所需的值提取到一个可迭代对象中,然后查找最大值。
data = [{1: 0.4, 3: 0.5}, {1: 0.2, 3: 0.9}, {1: 0.3, 3: 0.1}]
key = 1
max([d[key] for d in data])
请注意,在上面的示例中,我创建了一个列表,列表理解为[d[key] for d in data]。通常,在处理大量输入时,创建列表会占用大量内存,应该避免。使用生成每个元素的生成器可以获得类似的结果:
max(d[key] for d in data)
【讨论】:
Python max() 函数可以接受 key 参数,该参数指定用于排序的单参数函数。返回是列表中的一个元素,在本例中为字典。
dicts = [{1: 0.4, 3: 0.5}, {1: 0.2, 3: 0.9}, {1: 0.3, 3: 0.1}]
keys = [1, 3]
for key in keys:
max_d = max(dicts, key=lambda d: d[key])
print(f'maximum of key({key}) is {max_d[key]}')
maximum of key(1) is 0.4
maximum of key(3) is 0.9
【讨论】: