Python Dict,动态插入

时间:2013-10-12 23:31:37

标签: python python-3.x

你好我有以下代码为图表做邻接列表,它打印代码就好了,除非向va和vb添加新值,旧密钥会被覆盖。如果我发现顶点0与1和2相邻,我想添加两个,但是1被2覆盖。另外我尝试使用其他插入方法,我得到错误0,这是字典中没有键那个指数:

def caminhografo(grafo, va, vb):
    vat = vertex
    i = 0
    a = 0
    z = 0
    va = int(va)
    vb = int(vb)
    x = len(grafo.node)
    if va < vb:
        for va in range (vb+1):
            a = 0
            x = len(grafo.node)
            for a in range (x):
                if [int(va),int(a)] in grafo.node:
                    vat.adj[va] = a

    if va > vb:
        while vb > va:
            a = 0
            x = len(grafo.node)
            for a in range (x):
                if[int(vb),int(a)] in grafo.node:
                    vat.adj[vb] = a
            vb = vb - 1
    print (vat.adj)

我如何正确地动态插入键?

这是Vertex,grafo是图类:

class graph:
  v = 0
  a = 0
  node = []

class vertex:
  adj = {}

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您可以将vat.adj中的每个值声明为列表vat.adj[i] = [],然后执行     vat.adj[vb].append(a)

请注意,您需要将vat.adj中的每个项初始化为所有顶点的列表。

for i in range(n):
    vat.adj[i] = []

答案 1 :(得分:0)

使用defaultdict完成了工作。

from collections import defaultdict

然后我不是使用类顶点,而是创建了一个defaultdict(list):

vat = defaultdict(list)

之后,使用附加功能就可以了:

  

大桶[VA] .append(a)中

似乎用蛮力创建一个列表的字典不起作用,因为附加不会发生。但是使用导入列表的默认字典解决了这个问题。