BeeBand
BeeBand

Reputation: 11493

Elegant way to create a dictionary of pairs, from a list of tuples?

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 ) )

Upvotes: 7

Views: 4531

Answers (2)

John La Rooy
John La Rooy

Reputation: 304147

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

Upvotes: 10

Katriel
Katriel

Reputation: 123632

{ 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.

Upvotes: 4

Related Questions