Starck43
@Starck43
Web разработчик (Python, PHP, SQL + frontend )

Как преобразовать словарь в список с объединением по полю?

Есть словарь:
[{'group': 'style', 'name': 'Классика'}, {'group': 'style', 'name': 'Модерн'}, {'group': 'type', 'name': '2-х комнатная квартира'}]


Мне надо создать список из двух объединенных групп: 'style' и 'type' и вывести в цикле их по отдельности.
Хочу получить следующее:
<ul class="style-group">
    <li>Классика</li>
    <li>Модерн</li>
</ul>
<ul class="type-group">
    <li>2-х комнатная квартира</li>
</ul>


Как правильно это сделать? Спасибо
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
adugin
@adugin Куратор тега Python
from itertools import groupby
from operator import itemgetter

data = [
    {'group': 'style', 'name': 'Классика'},
    {'group': 'style', 'name': 'Модерн'},
    {'group': 'type', 'name': '2-х комнатная квартира'}
]

ig = itemgetter('group')

result = [list(group) for key, group in groupby(sorted(data, key=ig), ig)]

from collections import defaultdict

data = [
    {'group': 'style', 'name': 'Классика'},
    {'group': 'style', 'name': 'Модерн'},
    {'group': 'type', 'name': '2-х комнатная квартира'}
]

result = defaultdict(list)

for item in data:
    result[item['group']].append(item)

result = list(result.values())
Ответ написан
@Wispik
from itertools import groupby

test_list = [{'group': 'style', 'name': 'Классика'}, {'group': 'style', 'name': 'Модерн'}, {'group': 'type', 'name': '2-х комнатная квартира'}, {'group': 'style', 'name': 'Модерн'}]

keyfunc = lambda x:x['group']
res = [list(data) for _, data in groupby(sorted(test_list, key=keyfunc), key=keyfunc)]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы