Python 如何创建n个字典的列表

Python 如何创建n个字典的列表,python,Python,我正在学习Python,为了练习,我正在编写一个脚本,读取一个文件(在中包含一个图形),并在该图形上运行两个图形算法 我考虑将图存储在n个字典的列表中,其中n是顶点的数量,一个顶点的所有边都将存储在字典中 我试过这个 edges = [{} for i in xrange(num_vertexes)] for line in file: args = line.split(' ') vertex1 = int(args[0]) vertex2 = int(args[1])

我正在学习Python,为了练习,我正在编写一个脚本,读取一个文件(在中包含一个图形),并在该图形上运行两个图形算法

我考虑将图存储在n个字典的列表中,其中n是顶点的数量,一个顶点的所有边都将存储在字典中

我试过这个

edges = [{} for i in xrange(num_vertexes)]
for line in file:
    args = line.split(' ')
    vertex1 = int(args[0])
    vertex2 = int(args[1])
    label = int(args[2])
    edges[vertex1][vertex2] = label
但我在最后一行得到了这个错误:

索引器:列表索引超出范围


看起来
vertex1
可能大于
num\u vertexs
。假设python索引从0开始,wiki上的示例从1开始,最后一行的顶点数可能比索引的长度高1(当然,我需要查看文件才能确定)。因此在python中,
lst[0]
是第一个元素,
lst[n-1]
是最后一个元素,其中对于顶点,
1
是第一个元素,
n
是最后一个元素


因此,这里的修复方法是使用
vertex1=int(args[0])-1

问题出在数据的某个地方,添加一些验证以确保您的代码不会被坏数据阻塞。当前,如果一行没有数字,少于三个数字,或者
vertex1>=len(edges)
,代码将失败

edges=[{}对于xrange中的i(num_vertexs)]
对于文件中的行:
args=行分割(“”)
如果len(args)>=3:
尝试:
顶点1=int(参数[0])
顶点2=int(args[1])
label=int(args[2])
如果顶点1

如果需要,用日志记录替换任何
pass
语句(如果不打算使用它们,也可以删除这两个
else
块)。

能否举例说明要生成的数据格式以及生成此数据格式的文件中的行?@DavidAlber,效果不太好,因为内部字典将通过引用进行复制<代码>tst=[{}]*5;tst[0][1]=1;tst
将输出
[{1:1}、{1:1}、{1:1}、{1:1}、{1:1}]
。您可以使用的是
[{}for x in xrange(num_vertexs)]
。您可能对Guido关于男生的文章感兴趣,请参阅dcelements的答案。这个问题原来是我在代码中犯的一个非常愚蠢的错误。我忽略了一个事实,即第一个顶点(在TGF数据格式中)从1开始,而不是0。因此出现了错误。对不起,打扰你们了@简·泽根:谢谢你的链接!我真傻!我怎么会忽视这一点?使用vertex1=int(args[0])-1解决了这个问题。非常感谢:)
edges = [{} for i in xrange(num_vertexs)]
for line in file:
    args = line.split(' ')
    if len(args) >= 3:
        try:
            vertex1 = int(args[0])
            vertex2 = int(args[1])
            label = int(args[2])
            if vertex1 < len(edges):
                edges[vertex1][vertex2] = label
            else:
                # value for vertex1 is too large
                pass
        except ValueError:
            # you got some non-number data
            pass
    else:
        # you got a line with not enough data
        pass