Агрегируйте и суммируйте значения списка наборов и возвращайте наибольшее значение

#python #set

Вопрос:

У меня есть список с наборами, который соответствует приведенной ниже структуре. Я хотел бы суммировать все числовые элементы набора и агрегировать по цвету.

 # Declare a list of sets

colors = [{"red", 1, 2},
          {"red", 2, 4},
          {"blue", 1, 2},
          {"blue", 1}]

# Iterate over each set in the list
for i in colors:
    
    for e in i:

        # sum each numeric value in the set and aggregate by color

        
 

Ожидаемый результат:

верните цвет с наибольшей суммой (красный)

красный 9

Ответ №1:

Вы можете попробовать это:

 from collections import defaultdict

colors = [{"red", 1, 2}, {"red", 2, 4}, {"blue", 1, 2}, {"blue", 1}]

d = defaultdict(int)
for c in colors:
    tot = 0
    for item in c:
        if type(item) is str:
            key = item
        else:
            tot  = item
    d[key]  = tot

sorted(d.items(), key=lambda x: x[1], reverse=True)[0]
 

Это дает:

 ('red', 9)