这是一个概念性问题,我需要为网络模拟实例化一些“节点”。命名是问题 - 我需要一种方法来自动生成实例的名称(任何允许我在创建后跟踪和引用节点的方法)
为了更好地了解我需要什么,这就是大多数循环看起来像是问题所在的主题标签。 x和y将在父函数中定义。
for n in range(1000):
#n, but somehow converted into the name of the dict# = {
'address':n,
'resistance':x,
'special':[],
'parent':y,
'children':[],
'adjnodes':[]
}
道歉是一个菜鸟。我已经搜索了这个问题的答案,所以如果很明显那么我就会滥用这个术语或其他东西;在这种情况下,请让我知道使用什么术语,我会抓住我的帽子,并在我的路上。不是讽刺,只是喜欢在必要时严厉教导。感谢。
答案 0 :(得分:4)
听起来你正试图将它们创建为一堆独立的变量,然后将变量的名称存储在每个变量的address
字段中。
不要那样做。有关原因的说明,请参阅Keep data out of your variable names和Why you don't want to dynamically create variables。但简短的版本是,尝试这样做是你首先遇到问题的唯一原因。
为什么不在所有节点中创建一个list
?然后您的address
可以只是该列表的索引。例如:
nodes = []
for n in range(1000):
nodes.append({
'address':n,
'resistance':x,
'special':[],
'parent':y,
'children':[],
'adjnodes':[]
})
或者,如果您计划在进行时添加和删除节点,那么列表索引将不会保持一致,只需使用dict
:
nodes = {}
for n in range(1000):
nodes[n] = {
'address':n,
'resistance':x,
'special':[],
'parent':y,
'children':[],
'adjnodes':[]
}
答案 1 :(得分:1)
如果n
有意义,您可以将dict
中的每一个放入另一个dict
作为密钥的n
。
如果n
没有意义,只需将dict
添加到list
。
无论哪种方式,请将数据保留在变量名称之外。