Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Dict,动态插入_Python_Python 3.x - Fatal编程技术网

Python Dict,动态插入

Python Dict,动态插入,python,python-3.x,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 =

您好,我有下面的代码,它为一个图形创建了一个邻接列表,它可以很好地打印代码,除了向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)

谢谢您的帮助。

您可以将
vat.adj
中的每个值声明为列表
vat.adj[i]=[]
,然后执行以下操作 增值税。调整[vb]。附加(a)

注意:您需要将
vat.adj
中的每个项目初始化为所有项目的列表

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

使用defaultdict完成了这项工作

from collections import defaultdict
然后,我没有使用类vertex,而是创建了一个defaultdict(列表):

在此之后,使用append实现了以下技巧:

增值税[va]。追加(a)


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

当vb>va时,如果va>vb如何处理
?我还以为你永远不会进入循环。什么类型的对象是
vat.adj
vat
似乎是对全局变量
vertex
的引用,但这对我一点帮助都没有。如果条目处于该状态,va和vb要么比另一个高,要么根本没有。只需一段时间,就可以为执行第一个的相反操作。@Rex不,如果此代码是您实际拥有的代码,则该循环永远不会发生。感谢您的更正,但我遇到的问题是在第一个if/for的第一次插入中。如果我有以下圆弧:[[0,1],[1,0],[0,2],[2,0]],它将打印:{0:[2,2],1:[0,0],2:[0,0]}这意味着它覆盖了0:[1,1]并且它正在打印索引,这没有帮助。你的意思是当你做
vat.adj[0]。append(1)
,它将覆盖
0:[2,2]
0:[1,1]
?如果我使用append:AttributeError:'int'对象没有属性'append',这是append:vat.adj[va]。append(a)已经做了:对于范围(x)中的z:vat.adj[z]=0,在第一个for之前,使用图的大小对其进行特殊化,并在所有位置放置零。仍然是相同的错误。@Rex
vat.adj[z]=[]
而不是0,就像在我的帖子中一样。
from collections import defaultdict
vat = defaultdict(list)