从python上的文本文件创建字典

时间:2014-04-22 00:52:12

标签: python dictionary

我对词典相当新,我试图通过以下格式从输入文本文件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']})

2 个答案:

答案 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)
相关问题