Разделить список словарей

Есть список, содержащий словари с ключами 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': 'Москва'}]
→ Ссылка