2010-08-11 17 views
7

he definido una tupla de este modo: (ranura, gameid, tasa de bits)¿Una forma elegante de crear un diccionario de pares, a partir de una lista de tuplas?

y ha creado una lista de los llamaron myListOfTuples. En esta lista puede haber tuplas que contengan el mismo gameid.

E.g. la lista puede verse como:

[ 
    (1, "Solitaire", 1000), 
    (2, "Diner Dash", 22322), 
    (3, "Solitaire", 0), 
    (4, "Super Mario Kart", 854564), 
    ... and so on. 
] 

De esta lista, que necesito para crear un diccionario de pares - (gameId, bitrate), donde el bitrate para que gameId es el primero que me encontré para ese particular, gameId en myListOfTuples.

E.g. En el ejemplo anterior, el diccionario de pares contendría solo un par con gameId "Solitario": ("Solitaire", 1000) porque 1000 es la primera tasa de bits encontrada.

NB. Puedo crear un conjunto de juegos únicos con esto:

uniqueGames = set((e[1] for e in myListOfTuples)) 

Respuesta

10

Para python2.6

dict(x[1:] for x in reversed(myListOfTuples)) 

Si tiene Python2.7 o 3.1, puede utilizar la respuesta de katrielalex

4
{ gameId: bitrate for _, gameId, bitrate in reversed(myListOfTuples) }.items() 

(Esta es una vista, no un conjunto Tiene operaciones setlike, pero si se necesita un conjunto, echarlo a uno..)

¿Estás seguro de que deseas un conjunto, no un diccionario de gameId: bitrate? Este último me parece que es una estructura de datos más natural para este problema.

+0

Gracias katrielalex - consigo un error de sintaxis justo después de la 'for'. ¿Por qué el 'revertido'? – BeeBand

+2

El 'revertido' se debe a que la asignación repetida del diccionario a la misma clave sobrescribe su valor; queremos el * primer * valor en la lista, entonces iteramos hacia atrás. Supongo que está utilizando Python 2.x, ya que las comprensiones de los diccionarios son nuevas para Py3k. Puedes hacer lo mismo con un generador, aunque es un poco más desordenado. Fijación. – katrielalex

+0

Ya veo. Sí, un diccionario sería más útil en realidad. – BeeBand

Cuestiones relacionadas