Подберите ключи к значениям в словаре в 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'}}