Установить на питон 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))
Ответы
Ответ 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 ])