Подберите ключи к значениям в словаре в python

Скажем, например, это мой словарь:

my_dict= {"0" : {"1","2","3"},"1":{"2"},"2":{"3"}}

Я хочу соединить эти значения и ключи вместе в каждом случае. Что было бы наиболее эффективным способом добавить каждый ключ в соответствующий ключ значений для создания пары. Извините, если моя формулировка слишком запутанная. По сути, я хочу, чтобы это стало:

my_dict={"0" : {"1","2","3"}, "1" : {"0","2"}, "2" : {"0","1","3"}, "3" : {"0","2"}}

Таким образом, каждое число соединяется в форме ключа и значения. Если все еще неясно, о чем я спрашиваю, просто дайте мне знать, и я постараюсь объяснить более четко.

Другой способ, которым я мог бы попытаться объяснить это, - представить мой текущий словарь как соответствия в орграфе, и я хочу преобразовать его, чтобы показать соответствия в неориентированном графике.

1 ответ

Решение

Ты можешь использовать collections.defaultdict за это. Пример -

from collections import defaultdict
result = defaultdict(set)
for key,value in my_dict.items():
    result[key].update(value)
    for elem in value:
        result[elem].add(key)

Здесь вы создаете defaultdict со значениями как set затем для каждого ключа в исходном словаре обновите его для того же ключа в result defaultdict. Затем перебирая каждый элемент в значении (множестве), вы добавляете key в качестве значения для элемента в result defaultdict.

Демо -

>>> my_dict= {"0" : {"1","2","3"},"1":{"2"},"2":{"3"}}
>>> from collections import defaultdict
>>> from collections import defaultdict
>>> result = defaultdict(set)
>>> for key,value in my_dict.items():
...     result[key].update(value)
...     for elem in value:
...         result[elem].add(key)
...
>>> pprint.pprint(result)
{'0': {'1', '2', '3'},
 '1': {'2', '0'},
 '2': {'0', '1', '3'},
 '3': {'2', '0'}}
Другие вопросы по тегам