Итак, мне дано два столбца
A S
A T
A Z
B F
B G
B P
B U
C D
C P
C R
D M
E H
F S
H U
1-й столбец - это список точек, а второй столбец - это список соседей точек. Я хотел бы сделать его словарем, чтобы {A: 'S', 'T', 'Z', B: 'F', 'G', 'P' и т. д.} и так далее.
То, что я пытался сделать, это то, что текстовый файл состоит из двух столбцов.
edges = open('romEdges.txt')
edgeslist = edges.read().split()
edgeskeys = edgeslist[::2]
edgesvalues = edgeslist[1::2]
dictionary = {}
for items in edgeskeys:
dictionary[items]=[]
dictionary = OrderedDict(sorted(dictionary.items(), key=lambda t: t[0]))
for items in edgeskeys:
if edgeskeys[items]==dictionary[items]:
print()
print(dictionary)
Я попытался сделать 2 списка, 1 из ключей и 1 из значений, и попытался сравнить их со словарем и т. д., и я просто не могу понять это правильно!
ДОЛЖЕН быть простой способ.
Пожалуйста помоги.
Ответ 1 · рейтинг 1 · muthan
Для людей, которые просто хотят создать простой словарь из столбцов без повторяющихся ключевых значений, это должно работать:
edges = open('romEdges.txt')
dict = {line[:1]:line[1:] for line in edges}
print dict
edges.close()
теперь у вас, возможно, есть пробелы или Backspaces в значениях, тогда вы можете replace() с пустыми строками:
edges = open('romEdges.txt')
dict = {line[:1]:line[1:].split()[0] for line in edges}
print dict
edges.close()
если у вас есть несколько столбцов, и вы хотите иметь список из следующих столбцов для этого значения ключа:
edges = open('romEdges.txt')
dict = {line[:1]:line[1:].split() for line in edges}
print dict
edges.close()
Ответ 2 · рейтинг 2 · hushaohan
Почему бы не просто построчную обработку?
f = open('romEdges.txt')
dic = {}
for l in f:
k, v = l.split()
if k in dic:
dic[k].extend(v)
else:
dic[k] = [v]
f.close()
print dic
Вывод из вашего ввода:
{'A': ['S', 'T', 'Z'], 'C': ['D', 'P', 'R'], 'B': ['F', 'G', 'P', 'U'], 'E': ['H'], 'D': ['M'], 'F': ['S'], 'H': ['U']}