Вы можете создать словарь со всеми максимальными весами для каждого цвета, используя collections.defaultdict
:
from collections import defaultdict
dic = {
'key-1': [('blue', '-20'), ('red', '-67')],
'key-2': [('blue', '-77'), ('cyan', '-67'), ('white', '-57')],
'key-3': [('blue', '-39'), ('cyan' , '-35'), ('purple', '-60')]
}
color_weight_groups = defaultdict(list)
for lst in dic.values():
for color, weight in lst:
color_weight_groups[color].append(weight)
max_weights = {k: max(map(int, v)) for k, v in color_weight_groups.items()}
print(max_weights)
, который будет выглядеть следующим образом:
{'blue': -20, 'red': -67, 'cyan': -35, 'white': -57, 'purple': -60}
Затем создайте новый словарь, который сравнивает каждый вес с максимальным весом:
result = {
k: [(color, weight) for color, weight in v if int(weight) == max_weights[color]]
for k, v in dic.items()
}
print(result)
, который дает этот отфильтрованный результат:
{'key-1': [('blue', '-20'), ('red', '-67')], 'key-2': [('white', '-57')], 'key-3': [('cyan', '-35'), ('purple', '-60')]}