2011-05-20 9 views
5

tengo una lista de 2-tuplas como este:La creación de un diccionario de una lista de 2-tuplas

l = [('a', 1), ('b', 2)] 

y yo quiero ser capaz de asignar esta en un objeto de diccionario, por lo que puedo hacer algo así como

l.a #=> 1 

Así que probé esto, pero ¿por qué falla?

d = reduce(lambda y,x : y.update({x[0]:x[1]}),l,{}) 

Esto da el error:

AttributeError: 'NoneType' object has no attribute 'update'

¿Qué estoy haciendo mal?

Respuesta

20
>>> l = [('a', 1), ('b', 2)] 
>>> d = dict(l) 
>>> d['a'] 
1 
+0

¡No sé por qué no me di cuenta de esto! Gracias Andrey – nemesisfixx

+0

Si bien esto resuelve el problema de mcnemesis, esta respuesta no responde a su pregunta sobre por qué su código estaba fallando. –

+1

@Steven Rumbalski: Porque 'dict.update' devuelve' None', not the dict. –

4

¿Por qué no hacer esto:

d = dict(l) 

Además, para responder a su pregunta, su solución está fallando debido a y (que es una 2-tupla) no tiene la actualización método, ya que no es una dict. Afortunadamente, lo que estás haciendo está integrado.

+0

Gracias @Rafe Kettler, lo que me confunde, sin embargo, acerca de mi enfoque, es; la primera vez que se ejecuta 'reduce', dado que paso el '{}' como 'valor inicial', ¿no puedo llamar' update' sobre él? ¿No está 'y' ligado al valor' {} 'en este caso, la primera vez que se ejecuta' reduce'? ¿O estoy equivocado? – nemesisfixx

Cuestiones relacionadas