Как словари с одинаковым значением одного ключа собрать в отдельные списки
Есть список словарей:
a = [{'letter': 'q', 'count': 2},
{'letter': 'r', 'count': 3},
{'letter': 'q', 'count': 5},
{'letter': 'e', 'count': 1},
{'letter': 'q', 'count': 6},
{'letter': 'r', 'count': 2}]
Необходимо сгруппировать их так, чтобы получить список словарей с одинаковым значением ключа letter, то есть
a = [[{'letter': 'q', 'count': 2}, {'letter': 'q', 'count': 5}, {'letter': 'q', 'count': 6}], [{'letter': 'r', 'count': 3}, {'letter': 'r', 'count': 2}], [{'letter': 'e', 'count': 1}]
Использовала такой код, но получается что есть несколько списков с одинаковыми словарями
for i in range(len(a)):
letter = a[i]['letter']
sp = []
sp.append(a[i])
for j in range(1, len(a)):
if a[j]['letter'] == letter:
sp.append(a[j])
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Проще пересобрать данные в словарь с подходящим ключом:
a = [{'letter': 'q', 'count': 2},
{'letter': 'r', 'count': 3},
{'letter': 'q', 'count': 5},
{'letter': 'e', 'count': 1},
{'letter': 'q', 'count': 6},
{'letter': 'r', 'count': 2}]
sp = {}
for i in a:
letter = i['letter']
sp[letter] = sp.get(letter, []) + [i]
a = list(sp.values())
print(*a, sep='\n')
Вывод:
[{'letter': 'q', 'count': 2}, {'letter': 'q', 'count': 5}, {'letter': 'q', 'count': 6}]
[{'letter': 'r', 'count': 3}, {'letter': 'r', 'count': 2}]
[{'letter': 'e', 'count': 1}]