Задать вопрос
@Aquinary
Хинафаг.

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

Это:
collections = [{'href': 'link1', 'wait': 1},
               {'href': 'link1', 'wait': 2},
               {'href': 'link2', 'wait': 1},
               {'href': 'link3', 'wait': 0}]

В это:
collections = [{'href': 'link1', 'wait': 3},
               {'href': 'link2', 'wait': 1},
               {'href': 'link3', 'wait': 0}]


Я пробовал делать через Counter, но он работает только в том случае, если значения ключей - числа. Ну или я не так что-то делал там :)

Заранее благодарен за помощь! Решение в голову никак не приходит, ну совсем никак.
  • Вопрос задан
  • 109 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
YardalGedal
@YardalGedal
yeah boy
Для настоящего слияния словарей
{**a, **b, **c}

Вам нужно не слияние словарей
result = []
for c in collections:
    inced = 0
    for n, collection in enumerate(result):
        if collection["href"] == c["href"]: 
            result[n]["wait"] += c["wait"]
            inced = 1
    if inced == 0: result.append(c)


Можно попробовать и так
result = []
for c in collections:
    for n, collection in enumerate(result):
        if collection["href"] == c["href"]: 
            result[n]["wait"] += c["wait"]
            break
    else: result.append(c)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@kzoper
def merge_dicts(*dict_args):
    """
    Given any number of dicts, shallow copy and merge into a new dict,
    precedence goes to key value pairs in latter dicts.
    """
    result = {}
    for dictionary in dict_args:
        result.update(dictionary)
    return result

z = merge_dicts(a, b, c, d, e, f, g)
Ответ написан
Комментировать
@Animkim
Питон вокруг меня
res = defaultdict(int)
for d in collections:
    res[d['href']] += d['wait']
res = [dict(zip(('href', 'wait'), c)) for c in sorted(res.items())]

Python2, на третьем возможно нужно что-нибудь поправить. Большая часть кода занимается восстановлением оригинальной структуры, думаю можно попроще написать. Исходил из того что нам заранее известны ключи словаря и их количество.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы