Сделать словарь из повторяющегося набора данных в Python - PullRequest
0 голосов
/ 21 марта 2020

Учитывая ввод, подобный этому:

1 2
2 3
2 5
5 1
3 4
4 5
4 6

Я пытаюсь превратить его в словарь, подобный следующему:

dict = {
    1: [2, 5],
    2: [1, 3, 5],
    3: [2, 4],
    4: [3, 5, 6],
    5: [1, 2, 4],
    6: [2, 4],
}

Думайте о нем как о вершинах и соответствующих соседях. Таким образом, у вершины 1 есть два разных соседа: 2 и 5 ... et c

Я подумал, что было бы идеально сделать данные в двумерном массиве, просмотреть список и добавить новые значения в словарь

inp = []
for i in range(7):
    v1, v2 = map(int, input().split())
    inp.append([v1, v2])

возвращает:

[[1, 2], [2, 3], [2, 5], [5, 1], [3, 4], [4, 5], [4, 6]]

Но я не уверен, откуда go отсюда

Ответы [ 2 ]

3 голосов
/ 21 марта 2020

Использование defaultdict :

from collections import defaultdict

result = defaultdict(set)
for line in range(7):
    source, target = map(int, input().strip().split())
    result[source].add(target)
    result[target].add(source)

result = {k: list(v) for k, v in result.items()}
print(result)

В качестве альтернативы вы можете использовать dict с setdefault :

result = {}
for line in range(7):
    source, target = map(int, input().strip().split())
    result.setdefault(source, set()).add(target)
    result.setdefault(source, set()).add(source)

result = {k: list(v) for k, v in result.items()}
print(result)

Выход (для заданного входа)

{1: [2, 5], 2: [1, 3, 5], 3: [2, 4], 5: [1, 2, 4], 4: [3, 5, 6], 6: [4]}
0 голосов
/ 21 марта 2020

Может быть, вы думали что-то подобное? Вывод

dict = {'1': [], '2': [], '3': [], '4': [], '5': [], '6': []}
with open("input.txt") as file:
    for line in file:
        u, v = line.split()
        dict[u].append(v)
        dict[v].append(u)


print(dict)

немного отличался от вашего:

{'1': ['2', '5'], '2': ['1', '3', '5'], '3': ['2', '4'], '4': ['3', '5', '6'], '5': ['2', '1', '4'], '6': ['4']}

Шахта не помешает повторениям

...