假设我有一个这样的列表tuples
:
[('Machine1', 88), ('Machine2', 90), ('Machine3', 78), ('Machine1', 90), ('Machine3', 95)]
我想过滤列表,使我只拥有与每个tuple
配对有关的最高值。因此,在此示例中,过滤后的列表为:
[('Machine2', 90),('Machine1', 90), ('Machine3', 95)]
我基本上想按最高值删除重复项。我知道set
只能删除完全相同的重复项,因此在这里我将无法做到。我认为我可以使用的另一种方法是使用adictionary
并在迭代列表时更新它(如果看到更高的值)。但是,有什么更Python的方式来解决这个问题?
这是使用的一种解决方案collections.defaultdict
。这个想法是迭代您的元组列表并追加到列表中。然后zip
与map
+max
一起使用以创建所需的结果。
from collections import defaultdict
L = [('Machine1', 88), ('Machine2', 90), ('Machine3', 78),
('Machine1', 90), ('Machine3', 95)]
d = defaultdict(list)
for name, num in L:
d[name].append(num)
res = list(zip(d, map(max, d.values())))
结果
[('Machine1', 90), ('Machine2', 90), ('Machine3', 95)]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句