Разделить список словарей
Есть список, содержащий словари с ключами name
, age
, city
.
Как этот список разделить на два списка:
В одном будут записи только с уникальными city
(т.е. в этом городе записан только 1 человек)
В другом только те, у которых значение city
совпадает.
Пример:
Лёша, 20, Москва
Гриша, 22, Питер
Оля 21, Москва
Словарь: {name: Гриша, age: 22, city: Питер}
должен быть в одном списке, а Лёша и Оля в другом.
Думал создать set
с городами, и вложенными циклами бегать по сету и спискам, но не получилось...
Ответы (1 шт):
Автор решения: Глeб
→ Ссылка
Можно использовать defaultdict
в качестве вспомогательного словаря для подсчета людей в городах:
from collections import defaultdict as dd
n = int(input())
l = [input().split(', ') for i in range(n)]
lst = []
for i in l:
lst.append({'name': i[0], 'age': i[1], 'city': i[2]})
cities = dd(int)
for item in lst:
cities[item['city']] += 1
l1, l2 = [], []
for i in lst:
if cities[i['city']] == 1:
l1.append(i)
else:
l2.append(i)
print(l1)
print(l2)
Ввод:
3
Лёша, 20, Москва
Гриша, 22, Питер
Оля, 21, Москва
Вывод:
[{'name': 'Гриша', 'age': '22', 'city': 'Питер'}]
[{'name': 'Лёша', 'age': '20', 'city': 'Москва'}, {'name': 'Оля', 'age': '21', 'city': 'Москва'}]