Pregunta

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') ]
¿Fue útil?

Solución

>>> 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 desee, pero predice no tienen ningún orden específico de todos modos. 1 Clasificar u organizarla según sea necesario.

Ver: artículos () , iteritems ()


En Python 3.x, que no se usará iteritems (que ya no existe), pero en lugar de utilizar items, que ahora vuelve una "vista" en los elementos del diccionario. Ver la Novedades documento para Python 3.0, y la nueva documentación rel="noreferrer"> .

1: preservación de inserción orden para dicts era añadido en Python 3.7

Otros consejos

ya que ningún otro ha hecho, voy a añadir versiones 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')]

Puede utilizar listas por comprensión.

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

te conseguiré [ ('a', 1), ('b', 2), ('c', 3) ] y

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

el otro ejemplo.

Leer más sobre listas por comprensión Si quieres, es muy interesante lo que puedes hacer con ellos.

Crear una lista de namedtuples

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

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

Se pueden listar los artículos como tuplas, clasificadas si se quiere, y obtener el nombre y la puntuación de, digamos que el jugador con la puntuación más alta (índice = 0) muy Pythonically como esto:

>>> player = best[0]

>>> player.name
        'Alex'
>>> player.score
         10

¿Cómo hacer esto:

lista en orden aleatorio o el orden de collections.OrderedDict :

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

en orden, clasificado por valor ( 'puntuación'):

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

ordenados con la puntuación más baratos primero:

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

clasificado con mayor puntuación en primer lugar:

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

lo que quieres es dict's items() y iteritems() métodos. 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 iteración, iteritems es preferible ya que utiliza un generador para producir las tuplas (clave, valor) en lugar de tener que mantener la lista completa 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')]
>>> 
[(k,v) for (k,v) in d.iteritems()]

y

[(v,k) for (k,v) in d.iteritems()]
>>> 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')]

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')]
d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
   k = (i,d[i])
   list.append(k)

print list

Para uso Python3.x

for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)

En Python 2.7 uso

for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)

Gracias

scroll top