python - 如何从python中的类访问字典值?
问题描述
我正在尝试使用类来使用以下代码创建字典:
import numpy as np
import collections
class Graph:
def __init__(self):
self.graph = collections.defaultdict(dict)
def add_edge(self, u, v, weight = 1, directed = True):
self.graph[u][v] = weight
if not directed:
self.graph[v][u] = weight
def __str__(self):
to_return = ''
for vertex in self.graph:
to_return += str(vertex) + ': '
for edge in self.graph[vertex]:
to_return += '(' + str(edge) + ', ' + str(self.graph[vertex][edge]) + ')'
to_return += ' '
to_return += '\n'
return to_return
link_i = [1, 1, 3, 3, 3, 4, 4, 5, 5, 6]
link_j = [2, 3, 1, 2, 5, 5, 6, 6, 4, 4]
if __name__ == '__main__':
g = Graph()
for i in range(len(link_i)):
g.add_edge(link_i[i],link_j[i])
print(g)
for key in g.graph:
print(g.graph[key])
这给出了一个输出是字典
{2: 1, 3: 1}
{1: 1, 2: 1, 5: 1}
{5: 1, 6: 1}
{6: 1, 4: 1}
{4: 1}
如何将输出作为数组列表而不是字典列表?
解决方案
您可以为您的类提供方法来包装此功能:
class Graph:
# all the other stuff
def verteces(self):
return self.graph.keys()
def neigbours(self, vertex):
return list(self.graph[vertex].keys())
g = Graph()
# fill the graph
for v in g.verteces():
print(g.neighbours(v))
推荐阅读
- go - 当我使用 `golang.org/x/time` NewLimiter() 时,限制更高的爆发,Allow() 将返回真正的更高的爆发
- oracle - ORA-00907: 过程返回表缺少右括号
- python - 我想将原始 HTML 传递给 QWebEngineView 但出现错误
- sql - 是否可以从临时表中恢复?
- templates - 让 Task 调用具有已知特定返回类型的任意函数的正确方法是什么?
- javascript - 每次重新渲染父组件时如何重新渲染子组件?
- spring-boot - Spring Boot RestController 在没有 SpringBootApplication 的情况下如何工作?
- gradle - 如何持久启用 Gradle 配置缓存功能?
- raku - 内省捕获的更好方法
- java - Android Studio 为 AIDL 生成 JavaDoc