Найти - Пользователи
Полная версия: Лист значений для ключа в словаре
Начало » Python для новичков » Лист значений для ключа в словаре
1
Kurtz
Код генерации графа:
 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']}
?
terabayt
 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)
Kurtz
terabayt
Спасибо!
UPD.
Или так:
 def make_link(G, v1, v2):
    G[v1].append(v2)
    G[v2].append(v1)
G = defaultdict(list)
terabayt
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)
Kurtz
terabayt
Да, вы правы, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB