[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