объединение списка словарей при объединении значений аналогичного ке - PullRequest
0 голосов
/ 28 ноября 2018

Мне нужно сделать функцию, которая берет список словаря и возвращает их сумму,

, например

  • в [{(1,3):2, (2,7):1} , {(1,3):6}], она должна возвращать {(1,3): 8, (2,7): 1}
  • если их сумма равна 0, он удаляет ключ из словаря.Проблема здесь в том, что он возвращает [(1, 3), 6]

def swe(lst):
    s = []
    a = []
    v = []
    q = 0
    l = 0 
    for d in lst:
        s.append(d.keys())
        v.append(d.values())
    for i in s:
        for j in i:
            if len(i) == 1:
                a.append(j)
            if len(i) > 1:
                a.append(j)
                for t in a:
                    if a.count(t) == 1:
                        for q in range(len(v)):
                            for q in range(len(s)):
                                dct1 = v[q]
                                dct2 = s[q]
                                dct3 = dct2+ dct1
                                q = q+1
                                continue
                        return dct3
                    if a.count(t) > 1:
                        for l in range(len(a)):
                            dct5 = v[q]
                            dct6 = s[q]
                            dct7 = dct5 + dct6
                            l = l+ 1
    return dct7



print swe([{(1,3):2, (2,7):1} , {(1,3):6}])

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вероятно, вы ищете что-то вроде этого:

def swe(lst):
    res = dict()
    for d in lst:
        for key,value in d.items():
            if key in res:
                res[key] += value
            else:
                res[key] = value

    for key,value in res.items():
        if value == 0:
            res.pop(key)

    return res
0 голосов
/ 28 ноября 2018

За вашим кодом довольно сложно следовать однобуквенным именам переменных, поэтому я написал что-то новое, что, я думаю, делает то, что вы хотите:

def merge_dictionaries(list_of_dictionaries):
    results_dict = dict()
    for dictionary in list_of_dictionaries:
        for key, value in dictionary.items():
            results_dict[key] = results_dict.get(key, 0) + value

    return {key: value for (key, value) in results_dict.iteritems() if value != 0}


print merge_dictionaries([{(1,3):2, (2,7):1} , {(1,3):6 , (9,9) : 0}])
>>> {(2, 7): 1, (1, 3): 8}

Он просматривает каждый словарь в вашем списке и добавляет значениедо суммы, а затем отфильтровывает ответы с суммой 0 в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...