usar funciones ejercicio diccionarios diccionario desempaquetar declarar declaracion comparar cargar python

funciones - ¿Cómo puedo convertir un diccionario de Python a una lista de tuplas?



ejercicio diccionario python (9)

Si tengo un diccionario como:

{ ''a'': 1, ''b'': 2, ''c'': 3 }

¿Cómo puedo convertirlo a esto?

[ (''a'', 1), (''b'', 2), (''c'', 3) ]

¿Y cómo puedo convertirlo a esto?

[ (1, ''a''), (2, ''b''), (3, ''c'') ]


Lo que quiere son los métodos de dict items() y iteritems() . items devuelve una lista de tuplas (clave, valor). Como las tuplas son inmutables, no se pueden revertir. Por lo tanto, debe iterar los elementos y crear nuevas tuplas para obtener las tuplas invertidas (valor, clave). Para la iteración, iteritems es preferible ya que usa un generador para producir las tuplas (clave, valor) en lugar de tener que mantener toda la lista en la memoria.

Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a = { ''a'': 1, ''b'': 2, ''c'': 3 } >>> a.items() [(''a'', 1), (''c'', 3), (''b'', 2)] >>> [(v,k) for (k,v) in a.iteritems()] [(1, ''a''), (3, ''c''), (2, ''b'')] >>>


Por keys() y values() métodos de diccionario y zip .

zip devolverá una lista de tuplas que actúa como un diccionario ordenado.

Manifestación:

>>> d = { ''a'': 1, ''b'': 2, ''c'': 3 } >>> zip(d.keys(), d.values()) [(''a'', 1), (''c'', 3), (''b'', 2)] >>> zip(d.values(), d.keys()) [(1, ''a''), (3, ''c''), (2, ''b'')]


Puedes usar listas de comprensión.

[(k,v) for k,v in a.iteritems()]

obtendrá [ (''a'', 1), (''b'', 2), (''c'', 3) ] y

[(v,k) for k,v in a.iteritems()]

el otro ejemplo.

Lea más sobre la lista de comprensiones si lo desea, es muy interesante lo que puede hacer con ellos.


ya que nadie más lo hizo, agregaré las versiones de py3k:

>>> d = { ''a'': 1, ''b'': 2, ''c'': 3 } >>> list(d.items()) [(''a'', 1), (''c'', 3), (''b'', 2)] >>> [(v, k) for k, v in d.items()] [(1, ''a''), (3, ''c''), (2, ''b'')]


Crea una lista de namedtuples

A menudo puede ser muy útil usar namedtuple . Por ejemplo, tiene un diccionario de ''nombre'' como claves y ''puntaje'' como valores como:

d = {''John'':5, ''Alex'':10, ''Richard'': 7}

Puede enumerar los elementos como tuplas, ordenados si lo desea, y obtener el nombre y puntaje de, digamos, el jugador con el puntaje más alto (índice = 0) muy similar a Python:

>>> player = best[0] >>> player.name ''Alex'' >>> player.score 10

Como hacer esto:

liste en orden aleatorio o mantenga el orden de las collections.OrderedDict . collections.OrderedDict :

import collections Player = collections.namedtuple(''Player'', ''name score'') players = list(Player(*item) for item in d.items())

en orden, ordenados por valor (''puntaje''):

import collections Player = collections.namedtuple(''Player'', ''score name'')

ordenado con el puntaje más bajo primero:

worst = sorted(Player(v,k) for (k,v) in d.items())

ordenado con el puntaje más alto primero:

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)


>>> a={ ''a'': 1, ''b'': 2, ''c'': 3 } >>> [(x,a[x]) for x in a.keys() ] [(''a'', 1), (''c'', 3), (''b'', 2)] >>> [(a[x],x) for x in a.keys() ] [(1, ''a''), (3, ''c''), (2, ''b'')]


>>> d = { ''a'': 1, ''b'': 2, ''c'': 3 } >>> d.items() [(''a'', 1), (''c'', 3), (''b'', 2)] >>> [(v, k) for k, v in d.iteritems()] [(1, ''a''), (3, ''c''), (2, ''b'')]

No está en el orden que desea, pero los dicts no tienen ningún orden específico de todos modos. Ordénelo u organícelo según sea necesario.

Ver: items() , iteritems()

En Python 3.x, no usaría iteritems (que ya no existe), sino que usaría items , que ahora devuelve una "vista" en los ítems del diccionario. Consulte el documento Novedades para Python 3.0 y la nueva documentación sobre vistas .


[(k,v) for (k,v) in d.iteritems()]

y

[(v,k) for (k,v) in d.iteritems()]


d = {''John'':5, ''Alex'':10, ''Richard'': 7} list = [] for i in d: k = (i,d[i]) list.append(k) print list