Форум сайта python.su
Учусь. Подошло время сдавать задание (горю).
Итого: есть список словарей, в каждом словаре внутри этого списка ключи одинаковые - нужно либо получить один словарь, где величины из разных подсловарей будут объединены, либо любую структуру объединяющую набор пар (ключ, величина) из всех подсловарей.
Закавыка - нужно использовать исключительно (!!) компрехеншн, нельзя map и filter.
Например: Вход:
[{a: b, c: d}, {a: f, c: e}, {a: g, c: k}]
{a: [b, f, g], c: [d, e, k]}
[(a, b), (c, d), (a, f), (c, d), (a, g), (c, k)]
Отредактировано Kustodiev_17 (Сен. 27, 2020 13:18:48)
Офлайн
>>> from functools import reduce >>> s = [{"a": "b", "c": "d"}, {"a": "f", "c": "e"}, {"a": "g", "c": "k"}] >>> { x: [ y[x] for y in s ] for x in reduce(lambda x,y: x|y.keys(), s,set([])) } {'a': ['b', 'f', 'g'], 'c': ['d', 'e', 'k']} >>> reduce(lambda x,y: x+list(y.items()), s, []) [('a', 'b'), ('c', 'd'), ('a', 'f'), ('c', 'e'), ('a', 'g'), ('c', 'k')]
Отредактировано Rodegast (Сен. 27, 2020 19:45:32)
Офлайн
l = [{'a': 'b', 'c': 'd'}, {'a': 'f', 'c': 'e'}, {'a': 'g', 'c': 'k'}] res = {} [[res.setdefault(k, []).append(v) for k, v in x.items()] for x in l] print(res)
Офлайн
my = [{'a': 'b', 'c': 'd'}, {'a': 'f', 'c': 'e'}, {'a': 'g', 'c': 'k'}] def f(dict_list): temp = [] for d in dict_list: for k,v in d.items(): temp.append((k,v)) return temp convert = f(my) print(my) print(convert)
[{'a': 'b', 'c': 'd'}, {'a': 'f', 'c': 'e'}, {'a': 'g', 'c': 'k'}] [('a', 'b'), ('c', 'd'), ('a', 'f'), ('c', 'e'), ('a', 'g'), ('c', 'k')]
Офлайн
old_data = [{'a': 'b', 'c': 'd'}, {'a': 'f', 'c': 'e'}, {'a': 'g', 'c': 'k'}] new_data = [j for i in old_data for j in i.items()] print(new_data) # [('a', 'b'), ('c', 'd'), ('a', 'f'), ('c', 'e'), ('a', 'g'), ('c', 'k')]
Офлайн