Поскольку ключ может иметь более одного уникального слова, связанного с ним, имеет смысл, чтобы значения в новом словаре были объектом типа контейнера для хранения уникальных слов.
Набор Разница Оператор возвращает разницу между двумя наборами:
>>> a = set([1, 2, 3])
>>> b = set([2, 4, 6])
>>> a - b
{1, 3}
Мы можем использовать это для получения значений, уникальных для каждого ключа.Упаковка их в простую функцию приводит к:
def unique_words_dict(data):
res = {}
values = []
for k in data:
for g in data:
if g != k:
values += data[g]
res[k] = set(data[k]) - set(values)
values = []
return res
>>> d = {1:["one", "two", "three"],
2:["two", "four", "five"],
3:["one","four", "six"]}
>>> unique_words_dict(d)
{1: {'three'}, 2: {'five'}, 3: {'six'}}
Если вам нужно было сделать это только один раз, то вас может заинтересовать менее эффективный, но более понятный словарь:
>>> from functools import reduce
>>> {k: set(d[k]) - set(reduce(lambda a, b: a+b, [d[g] for g in d if g!=k], [])) for k in d}
{1: {'three'}, 2: {'five'}, 3: {'six'}}