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: tx...@nabla.net To: python-es@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@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/
_______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/