2012-12-20 2 views
1

Existe-t-il un meilleur moyen d'écrire cette fonction?Une manière plus pythonienne

def highest_strength(G): 
    highest_strength = None 
    highest_strength_val = 1 
    for node1 in G: 
     for node2 in G[node1]: 
      val = G[node1][node2] 
      if val > highest_strength_val: 
       highest_strength_val = val 
       highest_strength = (node1, node2) 
    return highest_strength 

Répondre

4

Très simple:

def highest_strength(graph): 
    return max((s, x, y) for x, links in graph.items() for y, s in links.items()) 

Comment c'est le travail:

>>> highest_strength(graph) 
(4, 'c', 'b') 

version élargie:

def highest_strength(G): 
    best_strength, best_link = None, (None, None) 
    for x, links in G.items(): 
     for y, v in links.items(): 
      if v > best_strength: 
       best_strength, best_link = v, (x, y) 
    return best_link 
+1

@Rastegar, vous devez accepter les réponses, si vous pensez qu'ils sont corrects et meilleurs. Sinon, les utilisateurs ne répondront plus à vos questions .. :) – defuz

Questions connexes