Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 27, 2020 13:13:38

Kustodiev_17
Зарегистрирован: 2013-12-25
Сообщения: 26
Репутация: +  1  -
Профиль   Отправить e-mail  

Использование исключительно Comprehension

Учусь. Подошло время сдавать задание (горю).

Итого: есть список словарей, в каждом словаре внутри этого списка ключи одинаковые - нужно либо получить один словарь, где величины из разных подсловарей будут объединены, либо любую структуру объединяющую набор пар (ключ, величина) из всех подсловарей.

Закавыка - нужно использовать исключительно (!!) компрехеншн, нельзя 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)

Офлайн

#2 Сен. 27, 2020 19:42:08

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2683
Репутация: +  182  -
Профиль   Отправить e-mail  

Использование исключительно Comprehension

 >>> 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)

Офлайн

#3 Сен. 27, 2020 19:58:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Использование исключительно Comprehension

    
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)



Офлайн

#4 Сен. 27, 2020 20:29:03

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1309
Репутация: +  113  -
Профиль   Отправить e-mail  

Использование исключительно Comprehension

 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')]

Офлайн

#5 Сен. 27, 2020 21:51:22

rami
Зарегистрирован: 2018-01-08
Сообщения: 280
Репутация: +  71  -
Профиль   Отправить e-mail  

Использование исключительно Comprehension

 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')]

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version