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/