tags:

views:

102

answers:

2

I have defined a tuple thus: (slot, gameid, bitrate)

and created a list of them called myListOfTuples. In this list might be tuples containing the same gameid.

E.g. the list can look like:

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

From this list, I need to create a dictionary of pairs - ( gameId, bitrate), where the bitrate for that gameId is the first one that I came across for that particular gameId in myListOfTuples.

E.g. From the above example - the dictionary of pairs would contain only one pair with gameId "Solitaire" : ("Solitaire", 1000 ) because 1000 is the first bitrate found.

NB. I can create a set of unique games with this:

uniqueGames = set( (e[1] for e in myListOfTuples ) )
+4  A: 
{ gameId: bitrate for _, gameId, bitrate in reversed( myListOfTuples ) }.items( )

(This is a view, not a set. It has setlike operations, but if you need a set, cast it to one.)

Are you sure you want a set, not a dictionary of gameId: bitrate? The latter seems to me to be a more natural data structure for this problem.

katrielalex
Thanks katrielalex - I get a syntax error just after the `for`. Why the `reversed`?
BeeBand
The `reversed` is because repeated dictionary assignment to the same key overwrites its value; we want the *first* value in the list, so we iterate backwards. I assume you're using Python 2.x, since dictionary comprehensions are new to Py3k. You can do the same thing with a generator, though it's a bit messier. Fixing.
katrielalex
I see. Yes, a dictionary would be more useful actually.
BeeBand
@katrielalex, dict comprehensions are in Python2.7 too
gnibbler
@BeeBand, if you just want a dict, leave off the `.items()`
gnibbler
+8  A: 

For python2.6

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

If you have Python2.7 or 3.1, you can use katrielalex's answer

gnibbler