@Ti-Jey

Как проверить значения одного словаря по ключу, в другом словаре по ключу и вывести новый словарь, со значениями первого словаря, которых нет во 2м?

Есть 2 похожих списка словарей:
s_small_sort =[{'ID': '174569', 'Name': 'Авдеев Корней', 'Age': '54'}, {'ID': '591886', 'Name': 'Авдеев Корней', 'Age': '24'}, {'ID': '392316', 'Name': 'Агафонов Остап', 'Age': '20'}, {'ID': '278400', 'Name': 'Аксёнов Натан', 'Age': '16'}, {'ID': '293922', 'Name': 'Алексеев Тимофей', 'Age': '29'}, {'ID': '604143', 'Name': 'Алексей Тeрeщенко', 'Age': '40'}, {'ID': '66721', 'Name': 'Артемьев Назарий', 'Age': '43'}, {'ID': '517124', 'Name': 'Артемьев Назарий', 'Age': '37'}]


s_big = [{'ID': '298835', 'Name': 'Лихачёв Аввакуум', 'Age': '76'}, {'ID': '720141', 'Name': 'Лихачёв Аввакуум', 'Age': '56'}, {'ID': '27164', 'Name': 'Суворов Август', 'Age': '31'}, {'ID': '469154', 'Name': 'Суворов Август', 'Age': '20'}, {'ID': '3290720', 'Name': 'Бибиков Авдей', 'Age': '19'}, {'ID': '3739928', 'Name': 'Юматов Авдей', 'Age': '14'}, {'ID': '4703064', 'Name': 'Алленов Авдей', 'Age': '24'}, {'ID': '4674783', 'Name': 'Нотович Агап', 'Age': '39'}, {'ID': '1443930', 'Name': 'Дудаков Агафон', 'Age': '24'}, {'ID': '2262161', 'Name': 'Круминь Агафон', 'Age': '82'}, {'ID': '2918131', 'Name': 'Мартюшев Агафон', 'Age': '81'}, {'ID': '4503953', 'Name': 'Мичурин Агафон', 'Age': '51'}, {'ID': '1405294', 'Name': 'Слобожанина Агафья', 'Age': '19'}, {'ID': '1430420', 'Name': 'Хмельнова Агафья', 'Age': '14'}, {'ID': '1862644', 'Name': 'Расторгуева Агафья', 'Age': '19'}, {'ID': '2835076', 'Name': 'Ямлиханова Агафья', 'Age': '15'}, {'ID': '4259886', 'Name': 'Федорова Агафья', 'Age': '22'}]


Необходимо найти людей в s_small_sort, которых нет в s_big по фамилии и вывести их в отдельный словарь?

for slov1 in s_small_sort:
    for slov2 in s_big:
        if (slov1['Name'].split()[0]) not in (slov2['Name'].split()[0]):
            print(slov1['Name'])


Он мне выводит каждое значение на итерации, а я хочу только тех, которых нет во всем словаре,
понимаю, что print() стоит во втором цикле, но как его вывести в первый цикл?

Главный вопрос, все таки найти людей в s_small_sort, которых нет в s_big по фамилии и создать новый словарь, со всеми ключами(ID, Name, Age)?
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
new = []

for person in s_small_sort:

    found = False

    for second_person in s_big:
        if person['Name'].split()[1] == second_person['Name'].split()[1]:
            found = True
            break

    if not found:
        new.append(person)

print(new)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
s_small_sort =[{'ID': '174569', 'Name': 'Авдеев Корней', 'Age': '54'}, {'ID': '591886', 'Name': 'Авдеев Корней', 'Age': '24'}, {'ID': '392316', 'Name': 'Агафонов Остап', 'Age': '20'}, {'ID': '278400', 'Name': 'Аксёнов Натан', 'Age': '16'}, {'ID': '293922', 'Name': 'Алексеев Тимофей', 'Age': '29'}, {'ID': '604143', 'Name': 'Алексей Тeрeщенко', 'Age': '40'}, {'ID': '66721', 'Name': 'Артемьев Назарий', 'Age': '43'}, {'ID': '517124', 'Name': 'Артемьев Назарий', 'Age': '37'}]
s_big = [{'ID': '298835', 'Name': 'Лихачёв Аввакуум', 'Age': '76'}, {'ID': '720141', 'Name': 'Лихачёв Аввакуум', 'Age': '56'}, {'ID': '27164', 'Name': 'Суворов Август', 'Age': '31'}, {'ID': '469154', 'Name': 'Суворов Август', 'Age': '20'}, {'ID': '3290720', 'Name': 'Бибиков Авдей', 'Age': '19'}, {'ID': '3739928', 'Name': 'Юматов Авдей', 'Age': '14'}, {'ID': '4703064', 'Name': 'Алленов Авдей', 'Age': '24'}, {'ID': '4674783', 'Name': 'Нотович Агап', 'Age': '39'}, {'ID': '1443930', 'Name': 'Дудаков Агафон', 'Age': '24'}, {'ID': '2262161', 'Name': 'Круминь Агафон', 'Age': '82'}, {'ID': '2918131', 'Name': 'Мартюшев Агафон', 'Age': '81'}, {'ID': '4503953', 'Name': 'Мичурин Агафон', 'Age': '51'}, {'ID': '1405294', 'Name': 'Слобожанина Агафья', 'Age': '19'}, {'ID': '1430420', 'Name': 'Хмельнова Агафья', 'Age': '14'}, {'ID': '1862644', 'Name': 'Расторгуева Агафья', 'Age': '19'}, {'ID': '2835076', 'Name': 'Ямлиханова Агафья', 'Age': '15'}, {'ID': '4259886', 'Name': 'Федорова Агафья', 'Age': '22'}]
filtered_names = []
for name in (i['Name'] for i in s_big):
    if name not in (i['Name'] for i in s_small_sort):
        filtered_names.append(name)
print(filtered_names)
Ответ написан
Ваш ответ на вопрос

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

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