Python 如果可以';你不能输入钥匙吗?
所以我试图翻阅一本用来教授不同类型的模型和算法的书,我发现了这个问题。我的代码如下。本质上,它生成图形的文本输出。单个点称为“顶点”,连接它们的线称为“边”。我现在要做的是检查两个顶点之间是否存在边Python 如果可以';你不能输入钥匙吗?,python,python-2.7,dictionary,key,Python,Python 2.7,Dictionary,Key,所以我试图翻阅一本用来教授不同类型的模型和算法的书,我发现了这个问题。我的代码如下。本质上,它生成图形的文本输出。单个点称为“顶点”,连接它们的线称为“边”。我现在要做的是检查两个顶点之间是否存在边 class Graph(dict): def __init__(self, vs=[], es=[]): for v in vs: self.add_vertex(v) for e in es: self.add
class Graph(dict):
def __init__(self, vs=[], es=[]):
for v in vs:
self.add_vertex(v)
for e in es:
self.add_edge(e)
def add_vertex(self, v):
self[v] = {}
def add_edge(self, e):
v,w = e
self[v][w] = e
self[w][v] = e
def get_edge(self, v, w):
g = dict(self)
keys = g.keys()
return type(keys[0])
def remove_edge(self, e):
pass
def vertices(self):
keys = self.keys()
return keys
class Vertex(object):
def __init__(self, label=''):
self.label = label
def __repr__(self):
return 'Vertex(%s)' % repr(self.label)
__str__ = __repr__
class Edge(tuple):
def __new__(cls, e1, e2):
return tuple.__new__(cls, (e1, e2))
def __repr__(self):
return 'Edge(%s, %s)' % (repr(self[0]), repr(self[1]))
__str__ = __repr__
v = Vertex('v')
w = Vertex('w')
e = Edge(v, w)
print e
g = Graph([v,w],[e])
print g
edge = Graph.get_edge(g, 'v', 'w')
print edge
问题在于:
def get_edge(self, v, w):
g = dict(self)
keys = g.keys()
return type(keys[0])
我无法访问字典中的值,因为我无法使用键,返回类型行显示了原因: 输出:
Edge(Vertex('v'), Vertex('w'))
{Vertex('v'): {Vertex('w'): Edge(Vertex('v'), Vertex('w'))}, Vertex('w'):{Vertex('v'): Edge(Vertex('v'), Vertex('w'))}}
<class '__main__.Vertex'>
边(顶点('v')、顶点('w'))
{顶点('v'):{顶点('w'):边(顶点('v'),顶点('w'))},顶点('w'):{顶点('v'):边(顶点('v'),顶点('w'))}
问题在于关键点不是字符串、整数或我可以引用的任何东西,它们是通过调用Vertex类生成的。有什么方法可以让我找到我丢失的钥匙吗?我的目标是让该方法返回请求的边(如果存在)。“我无法访问字典中的值,因为我无法使用键”-什么意思,您不能使用键?它们就在那里,
v
和w
。为什么顶点的实例不是“我可以引用的任何东西”?您没有实现\uuuuuu eq\uuuuu
、\uuu ne\uuuuu
和\uuuuu hash\uuuuuuu
,所以您的顶点和边都是通过身份进行比较的。这就是你想要的吗?同意上面的用户。您需要实现一种方法来唯一地散列每个顶点,或者实现一种严格明确的方法来确定两个顶点是否相同。否则,python将检查它们是否是相同的实例,而不一定是相同的节点,但是您选择定义一个节点。“我无法访问字典中的值,因为我不能使用键”-什么意思,您不能使用键?它们就在那里,v
和w
。为什么顶点的实例不是“我可以引用的任何东西”?您没有实现\uuuuuu eq\uuuuu
、\uuu ne\uuuuu
和\uuuuu hash\uuuuuuu
,所以您的顶点和边都是通过身份进行比较的。这就是你想要的吗?同意上面的用户。您需要实现一种方法来唯一地散列每个顶点,或者实现一种严格明确的方法来确定两个顶点是否相同。否则,python将检查它们是否是相同的实例,而不一定是相同的节点,但是您选择定义一个节点。