我对词典相当新,我试图通过以下格式从输入文本文件test.txt创建一个:
A: B, C
B: C, D
C: D
D: C
E: F
F: C
理想情况下,我想创建一个如下字典:
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
这就是我得到的,但我被困住了,因为我无法得到一个字典,就像一个bove,它将代表一个图表:
from collections import defaultdict
def createDirectory():
new_graph = defaultdict(list)
fin = 'test.txt'
with open(fin,'r') as f:
for line in f:
line = line.rstrip('\n')
x = line.split(':')
new_graph[x[0]] = x[1]
return new_graph
上面给出了如下列表:
defaultdict(<type 'list'>, {'A': ' B, C', 'C': ' D', 'B': ' C, D', 'E': ' F', 'D': ' C', 'F': ' C'})
编辑:使用以下内容我更接近:
new_graph[x[0]].append(x[1])
然而,我不知道如何摆脱空白并获得正确的顺序,以便我得到A,B,C,D,E,F而不是A,C,B,E,E, ˚F
defaultdict(<type 'list'>, {'A': [' B, C'], 'C': [' D'], 'B': [' C, D'], 'E': [' F'], 'D': [' C'], 'F': [' C']})
答案 0 :(得分:0)
这就是你要找的东西。你应该使用value.split(,),这样价值将被分隔符&#39;,&#39;分开。并将返回一个列表。
from collections import OrderedDict
def createDirectory():
new_graph = {}
fin = 'test.txt'
with open(fin,'r') as f:
for line in f:
line = line.rstrip('\n')
key,value = line.split(':')
values = value.split(',')
values = map(str.strip, values)
new_graph[key] = values
new_graph = OrderedDict(sorted(new_graph.items()))
return new_graph
<强>更新强> 编辑了去除前导和尾随空格的答案并使用OrderedDict
答案 1 :(得分:0)
您不需要defaultdict
,这些是您需要积累的东西 - 您的文本文件包含完整形成的dict
,您只需要正确解析它。
One-liner(好的,两个)版本:
with open('test.txt') as f:
d = {k:[x.strip() for x in v.split(',')] for k,v in (line.split(':') for line in f)}
d
Out[56]:
{'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
如果上述字典理解是令人生畏的,那只是一种简洁的写作方式:
with open('test.txt') as f:
d = {}
for line in f:
k,v = line.split(':')
for x in v.split(','):
x = x.strip()
d.setdefault(k,[]).append(x)