Python Dict,动态插入
您好,我有下面的代码,它为一个图形创建了一个邻接列表,它可以很好地打印代码,除了向va和vb添加新值时,旧的键会被覆盖。如果我发现顶点0与1和2相邻,我想将两者相加,但1被2覆盖。此外,我还尝试使用其他插入方法,但出现错误0,即字典中没有具有该索引的键: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 =
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之前,使用图的大小对其进行特殊化,并在所有位置放置零。仍然是相同的错误。@Rexvat.adj[z]=[]
而不是0,就像在我的帖子中一样。
from collections import defaultdict
vat = defaultdict(list)