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@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

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

Responder a