Как я могу обновить словарь так, чтобы, если ключ 'a' имел значение 'c', тогда ключ 'c' добавляет значение 'a'? - PullRequest
0 голосов
/ 25 марта 2019

Если ключ 'a' имеет значение 'c', тогда ключ 'c' должен добавить 'a'.Обратите внимание, что значения, связанные с ключом 'a', не включены в приложение.

Я не могу понять, как автоматизировать этот процесс для выполнения в большом словаре.

mydict = {
'a': ['z', 'c'],
'b': ['y', 'c'],
'c': ['q', 'r']
}

Вот мой желаемый результат:

mydict = {
'a': ['z', 'c'],
'b': ['y', 'c'],
'c': ['q', 'r', 'a', 'b']
}

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

Вот еще один способ сделать это: использовать пересечения множеств, а также сохранить промежуточное отображение отношений родитель / потомок.

from collections import defaultdict

d = defaultdict(list)

keys = set([*mydict])

for k, v in mydict.items():
    intersected = keys & set(v)
    for i in intersected:
        d[i].append(k)

print(d)
# defaultdict(list, {'c': ['b', 'a']})

for found, value in d.items():
    mydict[found].extend(value)

print(mydict)
# {'a': ['z', 'c'], 'b': ['y', 'c'], 'c': ['q', 'r', 'b', 'a']}
0 голосов
/ 25 марта 2019
for k in mydict:
    for val in mydict[k]:
        if val in mydict:
            mydict[val] += [k]
...