Сумма списка кортежей с одинаковыми значениями и преобразование в словарь

#python #list #dictionary #tuples

Вопрос:

Подход 1:

 def get_dict(lists):
    lists.sort()
    summing=0
    value=''
    mydict={}
    for i in my_list:
        print(i)
        if (value in i[0]):
            summing = summing i[1]
            mydict[i[0]] = summing
            value = i[0]
        else:
            summing = i[1]
            value = i[0]
    print(mydict)
 

Подход 2:

 def get_dict(mylists):
    d={}
    for item in my_list:
        if item[0] in d.keys():
            d[item[0]] = d.get(item[0]) item[1]
        else:
            d[item[0]] = item[1]
    
    print(d)
 

Ввод

мой список = [(‘a’,1), (‘b’,2), (‘b’,3), (‘a’,5), (‘c’,20), (‘a’,15), (‘c’,40)]

get_dict(мой список)

Выход

{‘a’: 21, ‘b’: 5, ‘c’: 60}

Комментарии:

1. Какой у тебя вопрос? Пожалуйста , не называйте переменные sum , это перезаписывает встроенное.

2. Используя defaultdict : d = defaultdict(int); for a,b in my_list: d[a] = b

3. Спасибо за ваш комментарий, внес правку и добавил другой подход

4. Я не хотел использовать dict по умолчанию, так как тип возвращаемого вывода меняется на —->defaultdict(int, {‘a’: 21, ‘b’: 5, ‘c’: 60})

5. Вы можете просто return dict(d) вернуть словарь.

Ответ №1:

Вам просто нужно проверить, существует ли ключ уже или нет.

 my_list = [('a',1), ('b',2), ('b',3), ('a',5), ('c',20), ('a',15), ('c',40)]                       

dic = dict()                                                                                       

for  i in my_list: 
    if i[0] not in dic: 
        dic[i[0]] = i[1] 
    else: 
        dic[i[0]]  = i[1] 

dic
# {'a': 21, 'b': 5, 'c': 60}