Я думаю, что природа вашей проблемы в том, что вы сбрасываете flag=True
при каждой итерации l oop. При такой структуре кода вы не найдете «ключей, которые ни в одном из значений», вместо этого вы найдете «ключи, которые отсутствуют хотя бы в одном из значений». Поскольку каждая клавиша отсутствует хотя бы в одном из значений, ваша функция возвращает все клавиши.
Один из способов сделать это - использовать встроенный в Python объект set()
, используя set arithmeti c встроенные методы:
d1 = {"A": ["J"], "B": ["A"], "C": ["A", "D", "J"], "D": ["A", "J"]}
set_of_keys = set(d1.keys())
set_of_values = set()
for vals in d1.values():
set_of_values.update(vals)
print(set_of_keys)
print(set_of_values)
values_that_arent_keys = set_of_values - set_of_keys
print(values_that_arent_keys)
keys_that_arent_values = set_of_keys - set_of_values
print(keys_that_arent_values)
Дает:
{'D', 'C', 'B', 'A'}
{'J', 'D', 'A'}
{'J'}
{'C', 'B'}
Вы можете использовать sorted()
, если хотите, чтобы ваши наборы печатались в алфавитном порядке.