#python #python-3.x #for-loop
#python #python-3.x #цикл for
Вопрос:
Я пытаюсь создать цикл for, в котором он проверяет, есть ли элемент в словаре.
dict = {}
if element1 in dict:
dict[element1].add(element2)
elif element1 not in dict:
dict[element1]=set().add(element2)
elif element2 in dict:
dict[element2].add(element1)
elif element 2 not in dict:
dict[element2]=set().add(element1)
Словарь, который я хочу получить, имеет следующую структуру данных;
dict={element 1:{element 2, element 3}, element2:{element3, element1}, ...}
(итак, устанавливается внутри словаря).
Комментарии:
1. Итак, вы хотите создать этот dict из списка (v1, v2) кортежей графа или чего-то еще?
2. Ваши второй и третий операторы elif недоступны. Не могли бы вы привести лучший пример?
3. Если я выполню приведенный выше код, я получу
{element1:{element2},element2:{element1}}
4. @Ry- Да! исходные данные имеют следующую структуру;
[(element1,element2), (element3, element1), (element 4, element 2)]
. Итак, я предполагаю, что они сортируются.
Ответ №1:
Похоже, вы просто ищете способ добавить элементы в набор внутри словаря, создав набор, если он еще не существует. Вы можете использовать DefaultDict, чтобы сделать это за вас.
from collections import defaultdict
dict = defaultdict(set)
edges = [("element1", "element2"), ("element3", "element1"), ("element4", "element2")]
for edge in edges:
dict[edge[0]].add(edge[1])
dict[edge[1]].add(edge[0]) # Remove if graph is directed
Дает:
{
'element1': {'element3', 'element2'},
'element2': {'element4', 'element1'},
'element3': {'element1'},
'element4': {'element2'}
}
Комментарии:
1. Вы также можете распаковать
for a, b in edges
, чтобы иметь возможность писатьdict[a].add(b)
иdict[b].add(a)
. (Еще одно замечание:dict
это своего рода сбивающее с толку имя переменной для dict, поскольку это также тип.)
Ответ №2:
Это мой окончательный код
elements = [("value1", "value2"), ("value3", "value4"), ("value4", "value2")]
sorted_elements = {}
for element1, element2 in elements:
sorted_elements.setdefault(element1, set()); sorted_elements.setdefault(element2, set())
sorted_elements[element1].add(element2); sorted_elements[element2].add(element1)
print(sorted_elements)
и он выведет
{'element1': {'element2', 'element3'}, 'element2': {'element1', 'element4'}, 'element3': {'element1'}, 'element4': {'element2'}}