简体   繁体   English

Python 中的 __iter__ 和 __getitem__ 方法

[英]__iter__ and __getitem__ method in Python

class Graph:
    
    def __init__(self, Nodes, is_directed = False):
        self.nodes = Nodes
        self.adj_list = {}
        
        self.is_directed = is_directed

        
        for node in self.nodes:
            self.adj_list[node] = {}
        
            
    def add_edge(self, u, v, w):
        
        self.adj_list[u][v] = w
        
        if not self.is_directed:
            
            self.adj_list[v][u] = w
            
    def __len__(self):
        return len(nodes)
        
    def __getitem__(self,node):
        
        return  self.adj_list[node]
    
    def __iter__(self):
        return iter(self.adj_list)

    
    def degree(self,node):
        '''Total number of edges coming out a given node'''
        return len(self.adj_list[node])
    
    def print_adj_list(self):
        
        for node in self.nodes:
            print(node, "->", self.adj_list[node])

all_edges = [

    ("A","B", 5),("A","C", 4),("B","D", 6),("C","D", 8),
    ("C","E", 6),("D","E",7)
]
nodes = ["A","B","C","D","E"]
graph1 = Graph(nodes)

for u,v,w in all_edges:
    graph1.add_edge(u,v,w)

Graph printed:图表打印:

A -> {'B': 5, 'C': 4}
B -> {'A': 5, 'D': 6}
C -> {'A': 4, 'D': 8, 'E': 6}
D -> {'B': 6, 'C': 8, 'E': 7}
E -> {'C': 6, 'D': 7}

I am trying to iterate through my class object Graph1 and return the key:value pair inside my nested dictionary.我正在尝试遍历我的 class object Graph1 并返回嵌套字典中的键:值对。

I access the nodes我访问节点

for vertex in graph1:
    print(vertex)

Which returns:返回:

A
B
C
D
E

But once I try and access the values inside the nested dictionary I cannot:但是,一旦我尝试访问嵌套字典中的值,我就不能:

for edge, weight in graph1["A"]:
    print("Edge:", edge, "Weight:", weight)
ValueError: not enough values to unpack (expected 2, got 1)

I am trying to return我正在尝试返回

Edge: B
Weight: 5
Edge: C
Weight: 4

I believe it has something to do with either my iter or getitem method.我相信这与我的itergetitem方法有关。

for edge, weight in graph1["A"].items(): print("Edge:", edge, "Weight:", weight)对于边,graph1["A"].items() 中的权重: print("Edge:", edge, "Weight:", weight)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM