Подтвердить что ты не робот

Установить на питон Python

существует ли какой-либо питонический способ преобразования набора в dict?

Я получил следующий набор

s = {1,2,4,5,6}

и хотите следующий dict

c = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0}

со списком, который вы сделали бы

a = [1,2,3,4,5,6]
b = []

while len(b) < len(a):
   b.append(0)

c = dict(itertools.izip(a,b))
4b9b3361

Ответ 1

Используйте dict.fromkeys():

c = dict.fromkeys(s, 0)

Демо:

>>> s = {1,2,4,5,6}
>>> dict.fromkeys(s, 0)
{1: 0, 2: 0, 4: 0, 5: 0, 6: 0}

Это работает и для списков; это самый эффективный способ создания словаря из последовательности. Обратите внимание, что все значения являются ссылками на этот по умолчанию, который вы передали в dict.fromkeys(), поэтому будьте осторожны, если это значение по умолчанию является изменяемым объектом.

Ответ 2

Помимо метода, приведенного @Martijn Pieters, вы также можете использовать понимание словаря следующим образом:

s = {1,2,4,5,6}
d = {e:0 for e in s}

Этот метод медленнее, чем dict.fromkeys(), но он позволяет вам устанавливать значения в dict в любое удобное для вас время, если вы не всегда хотите, чтобы он был равен нулю.

Вы также можете использовать его для создания списков, списки понятий быстрее и более питоничны, чем цикл, который у вас есть в вашем вопросе. Вы можете узнать больше о пониманиях здесь: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

Ответ 3

Это еще один способ сделать

s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])