【发布时间】:2014-02-24 04:01:44
【问题描述】:
我有一个应用程序,其中有一组命名节点。对于每对节点,我想存储它们的连接值。节点会随着时间的推移来来去去,所以我不能一开始就初始化一个“数组”。名称不是连续整数,而是任意对象 ID 或字符串名称。
我需要能够做到:
lookup(name1, name2) -> value
还有
set(name1, name2, value)
并且,当一个新节点加入时,要做的事情:
set(newname, [all other nodes], default_value)
假设对于每一对,方向无关紧要。即,(name1,name2) 应该与 (name2,name1) 具有相同的值。
最明显的 Python 实现似乎是一个两级字典:
{ name1 : { name2: value, name3:value}, name2: {name1:value, name3:value}, ... etc. }
这是最好的方法吗?
更新
在 Python 中使用带有对作为键的 dict 的建议可能更好。然而,我也有一个附带限制,能够将数据集导出和导入为列表列表(为了支持 Simics 模拟器中的状态序列化) - 为此,两级映射是很自然。但我想这对也会在那里工作。实际上,很难说什么更好。
【问题讨论】:
-
这个数据结构看起来很像一个图,尽管图对于您的应用程序来说可能是多余的。看看networkx或igraph...
-
它是一个图,但是是一个全连接图,所以一般的图可能是矫枉过正。
标签: python arrays dictionary