Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 22, 2016 12:35:38

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Лист значений для ключа в словаре

Код генерации графа:

 edges = [('a', 'g'), ('a', 'd'), ('g', 'c'), ('g', 'd'), 
             ('b', 'f'), ('f', 'e'), ('e', 'h')]
def make_link(G, v1, v2):
    if v1 not in G:
        G[v1] = {}
    G[v1][v2] = 1
    if v2 not in G:
        G[v2] = {}
    G[v2][v1] = 1
    return G
G = {}
for v1, v2 in edges: make_link(G, v1, v2)
Результат (вершина ‘а’ соединена с вершинами ‘d’ и ‘g’ и т.д.):
 {'a': {'d': 1, 'g': 1},
 'b': {'f': 1},
 'c': {'g': 1},
 'd': {'a': 1, 'g': 1},
 'e': {'f': 1, 'h': 1},
 'f': {'b': 1, 'e': 1},
 'g': {'a': 1, 'c': 1, 'd': 1},
 'h': {'e': 1}}
Подскажите, пожалуйста, как переписать функцию make_link для получения вместо
 {'a': {'d': 1, 'g': 1}}
результат
 {'a': ['d', 'g']}
?

Отредактировано Kurtz (Авг. 22, 2016 12:37:07)

Офлайн

#2 Авг. 22, 2016 12:56:22

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Лист значений для ключа в словаре

 from collections import defaultdict
edges = [('a', 'g'), ('a', 'd'), ('g', 'c'), ('g', 'd'),
         ('b', 'f'), ('f', 'e'), ('e', 'h')]
def make_link(G, v1, v2):
    G[v1].add(v2)
    G[v2].add(v1)
G = defaultdict(set)
for v1, v2 in edges:
    make_link(G, v1, v2)
print(G)



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Авг. 22, 2016 13:25:33

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Лист значений для ключа в словаре

terabayt
Спасибо!
UPD.
Или так:
 def make_link(G, v1, v2):
    G[v1].append(v2)
    G[v2].append(v1)
G = defaultdict(list)

Отредактировано Kurtz (Авг. 22, 2016 14:14:18)

Офлайн

#4 Авг. 22, 2016 13:39:54

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Лист значений для ключа в словаре

Kurtz
terabaytСпасибо!UPD.Или так:
нет
тогда будут повторения в списках
например
 from collections import defaultdict
edges = [('a', 'g'), ('g', 'a')]
def make_link(G, v1, v2):
    G[v1].append(v2)
    G[v2].append(v1)
G = defaultdict(list)
for v1, v2 in edges:
    make_link(G, v1, v2)
print(G)



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Авг. 22, 2016 14:48:43

Kurtz
Зарегистрирован: 2016-03-18
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Лист значений для ключа в словаре

terabayt
Да, вы правы, спасибо.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version