Hank Gay
Hank Gay

Reputation: 72029

Is there a more pythonic way to build this dictionary?

What is the "most pythonic" way to build a dictionary where I have the values in a sequence and each key will be a function of its value? I'm currently using the following, but I feel like I'm just missing a cleaner way. NOTE: values is a list that is not related to any dictionary.

for value in values:
    new_dict[key_from_value(value)] = value

Upvotes: 6

Views: 504

Answers (4)

Hank Gay
Hank Gay

Reputation: 72029

At least it's shorter:

dict((key_from_value(value), value) for value in values)

Upvotes: 18

vartec
vartec

Reputation: 134701

Py3K:

{ key_for_value(value) : value for value in values }

Upvotes: 5

user44484
user44484

Reputation:

This method avoids the list comprehension syntax:

dict(zip(map(key_from_value, values), values))

I will never claim to be an authority on "Pythonic", but this way feels like a good way.

Upvotes: 0

kurosch
kurosch

Reputation: 2312

>>> l = [ 1, 2, 3, 4 ]
>>> dict( ( v, v**2 ) for v in l )
{1: 1, 2: 4, 3: 9, 4: 16}

In Python 3.0 you can use a "dict comprehension" which is basically a shorthand for the above:

{ v : v**2 for v in l }

Upvotes: 15

Related Questions