[Python-es] Duda sobre matrizes en python y diccionarios con listas

Rafael Gomes rggg88 en hotmail.com
Jue Mar 14 01:07:21 CET 2013


Muchas gracias vicente, yo me temia que fuese que estuviese comparando cosas que no debiese, pero no estaba seguro y habia tratado de poner todo en el mismo tipo. 
Gracias por el consejo de las clases, como soy muy principiante en python no quise entrar con clases, se que normalmente son mas faciles de trabajar y entender, por lo menos fue la nocion que tuve cuando trabaje un poco con java.

Continuacion de una buena semana.
Un abrazo.

Date: Wed, 13 Mar 2013 23:39:49 +0100
From: txema en nabla.net
To: python-es en python.org
Subject: Re: [Python-es] Duda sobre matrizes en python y diccionarios con listas


  

    
  
  
    if (str(elem[0])==sw): # Estas comparando un string con una lista
    que contiene un unicode?

    lista_hosts[sw]=[] # sw es una lista, no te vale como clave.

    

    Pista: usa print y repr para ver que estas haciendo.

    

    Consejo: usa clases, encapsula cada propiedad o metodo y ponle un
    nombre.

    

    Algo asi:

    

    class Switch(object):    

        def __init__(self, mac):

            mac = mac[6:]

            print "Creando Switch", mac

            self.mac = mac

            self.hosts = []

            self.ports = {}

    

        def is_mac(self, mac):

            return mac.endswith(self.mac)

    

        def connect(self, mac, port):

            if mac == self.mac:

                return

            self.hosts.append(mac)

            self.ports[port]=mac

    

        def __repr__(self):

            return "<Switch %s %s>" % (self.mac,

                                       repr(self.ports))

    

    switches = []

    for sw in switch:

        mac = sw[0]

        s = Switch(mac)

        switches.append(s)

        for elem in mi:

            if s.is_mac(elem[0]):

                s.connect(elem[2], elem[1])

    print switches

    

    >>> 

    Creando Switch 00:1b:11:b4:16:80

    Creando Switch 00:02:44:a9:b5:34

    [<Switch 00:1b:11:b4:16:80 {2:
      u'76:45:87:ba:d7:5a'}>, 

       <Switch 00:02:44:a9:b5:34 {2: u'0e:2f:31:21:82:ee', 3:
      u'ba:67:bb:e1:da:5b'}>]

    

    

    El 13/03/2013 22:30, Rafael Gomes
      escribió:

    
    
      
      Hola de nuevo, ahora tengo una duda relacionada con
        la pregunta de mañana que lo queria guardar de forma diferente,
        ahora la informacion la tengo en este genero:

        

        switch=[[u'00:00:00:1b:11:b4:16:80'],
        [u'00:00:00:02:44:a9:b5:34']]

        puertos={u'00:00:00:02:44:a9:b5:34': [u'1'],
        u'00:00:00:1b:11:b4:16:80': [u'1']}

        mi=[[u'00:00:00:1b:11:b4:16:80', 65534, u'00:1b:11:b4:16:80'],
        [u'00:00:00:1b:11:b4:16:80', 2, u'76:45:87:ba:d7:5a'],
        [u'00:00:00:1b:11:b4:16:80', 1, u'00:1b:11:b4:16:80'],
        [u'00:00:00:02:44:a9:b5:34', 65534, u'00:02:44:a9:b5:34'],
        [u'00:00:00:02:44:a9:b5:34', 2, u'0e:2f:31:21:82:ee'],
        [u'00:00:00:02:44:a9:b5:34', 1, u'00:02:44:a9:b5:34'],
        [u'00:00:00:02:44:a9:b5:34', 3, u'ba:67:bb:e1:da:5b']]

        

        lista_hosts={}

        host=[]

        

        for sw in switch:

                for elem in mi:

                        if (str(elem[0])==sw):

                                lista_hosts[sw]=[]

                                if str(elem[1]) not in (['65534'] +
        puertos[elem[0]]):

                                        aux=[elem[2], elem[1]]

                                        host.append(aux)

                                        if host not in lista_hosts[sw]:

                                               
        lista_hosts[sw].append(host)

        

        print lista_hosts

        

        Mi idea es tener un diccionario para cada switch associando a
        cada los hosts respectivos, es decir, algo asi:

        {u'00:00:00:1b:11:b4:16:80,1': [[[u'76:45:87:ba:d7:5a', 2],
        u'00:00:00:02:44:a9:b5:34,1':[u'0e:2f:31:21:82:ee', 2],
        [u'ba:67:bb:e1:da:5b', 3]]}

        

        

        Solo que el me devuelve la lista vacia y no se que estoy
        haciendo mal, pienso que el problema es en el primer if pero no
        se que estoy haciendo mal.

        

        Otras cosas q experimente:

        

        Yo lo maximo de bueno que consegui fue esto:

        {u'00:00:00:02:44:a9:b5:34,1':[u'0e:2f:31:21:82:ee', 2],
        [u'ba:67:bb:e1:da:5b', 3], [u'76:45:87:ba:d7:5a', 2]}
        {u'00:00:00:1b:11:b4:16:80,1':[]}

        

        La otra cosa que hice fue esto:

        

        portos={u'00:00:00:02:44:a9:b5:34': [u'1'],
        u'00:00:00:1b:11:b4:16:80': [u'1']}

        mi=[[u'00:00:00:1b:11:b4:16:80', 65534, u'00:1b:11:b4:16:80'],
        [u'00:00:00:1b:11:b4:16:80', 2, u'76:45:87:ba:d7:5a'],
        [u'00:00:00:1b:11:b4:16:80', 1, u'00:1b:11:b4:16:80'],
        [u'00:00:00:02:44:a9:b5:34', 65534, u'00:02:44:a9:b5:34'],
        [u'00:00:00:02:44:a9:b5:34', 2, u'0e:2f:31:21:82:ee'],
        [u'00:00:00:02:44:a9:b5:34', 1, u'00:02:44:a9:b5:34'],
        [u'00:00:00:02:44:a9:b5:34', 3, u'ba:67:bb:e1:da:5b']]

        

        lista_hosts=[]

        host=[]

        

        for elem in mi:

                if str(elem[1]) not in (['65534'] + portos[elem[0]]):

                        aux=[elem[2], elem[1]]

                        host.append(aux)

                        if host not in lista_hosts:

                                lista_hosts.append(host)

        print lista_hosts

        

        que solo me da los hosts.

        Pero cuando entro con los switches no consigo :/.

        

        Si me pueden dar alguna pista o asi agradecia.

        

        La otra duda es sobre como puedo hacer matrizes en python? Yo
        utilize este metodo pero no se si es el mas correcto

        

        a=0

        a=[a]*tamanho

        matriz_adj=[a]*tamanho

        print matriz_adj

        

        La matriz es para tratar de hacer la matriz adjacente de mi red
        de casa.

        

        Muchas gracias mas una vez, disculpen mi ignorancia.

      
      

      
      

      _______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

    
    

  


_______________________________________________
Python-es mailing list
Python-es en python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/ 		 	   		  
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130314/f2426719/attachment.html>


Más información sobre la lista de distribución Python-es