Есть ли более питонный способ построить этот словарь? - PullRequest
6 голосов
/ 16 апреля 2009

Каков «самый питонический» способ создания словаря, в котором у меня есть значения в последовательности, и каждый ключ будет функцией его значения? В настоящее время я использую следующее, но я чувствую, что мне не хватает более чистого пути. ПРИМЕЧАНИЕ: values - это список, не связанный ни с одним словарем.

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

Ответы [ 4 ]

18 голосов
/ 16 апреля 2009

По крайней мере, короче:

dict((key_from_value(value), value) for value in values)
15 голосов
/ 16 апреля 2009
>>> l = [ 1, 2, 3, 4 ]
>>> dict( ( v, v**2 ) for v in l )
{1: 1, 2: 4, 3: 9, 4: 16}

В Python 3.0 вы можете использовать «диктовку», которая по сути является сокращением для вышеупомянутого:

{ v : v**2 for v in l }
5 голосов
/ 16 апреля 2009

Py3K:

{ key_for_value(value) : value for value in values }
0 голосов
/ 16 апреля 2009

Этот метод избегает синтаксиса понимания списка:

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

Я никогда не буду претендовать на звание авторитета в "Pythonic", но этот путь кажется хорошим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...