Каков «самый питонический» способ создания словаря, в котором у меня есть значения в последовательности, и каждый ключ будет функцией его значения? В настоящее время я использую следующее, но я чувствую, что мне не хватает более чистого пути. ПРИМЕЧАНИЕ: values - это список, не связанный ни с одним словарем.
values
for value in values: new_dict[key_from_value(value)] = value
По крайней мере, короче:
dict((key_from_value(value), value) for value in values)
>>> 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 }
Py3K:
{ key_for_value(value) : value for value in values }
Этот метод избегает синтаксиса понимания списка:
dict(zip(map(key_from_value, values), values))
Я никогда не буду претендовать на звание авторитета в "Pythonic", но этот путь кажется хорошим.