Ответ 1
dict((el,0) for el in a)
будет работать хорошо.
Python 2.7 и выше также поддерживают понимание dict. Этот синтаксис {el:0 for el in a}
.
У меня есть a = [1,2,3,4]
, и я хочу d = {1:0, 2:0, 3:0, 4:0}
d = dict(zip(q,[0 for x in range(0,len(q))]))
работает, но некрасиво. Какой более чистый способ?
dict((el,0) for el in a)
будет работать хорошо.
Python 2.7 и выше также поддерживают понимание dict. Этот синтаксис {el:0 for el in a}
.
d = dict.fromkeys(a, 0)
a
- это список, 0
- значение по умолчанию. Обратите внимание, чтобы не устанавливать значение по умолчанию для какого-либо изменяемого объекта (например, list или dict), потому что это будет один объект, используемый как значение для каждого ключа в словаре (отметьте здесь для решения для этого случая). Номера/строки безопасны.
В дополнение к ответу Тима, который очень подходит вашему конкретному примеру, стоит упомянуть collections.defaultdict
, который позволяет вам делать что-то вроде это:
>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
Для отображения [1, 2, 3, 4]
, как в вашем примере, это рыба из воды. Но в зависимости от причины, по которой вы задавали вопрос, это может оказаться более подходящей техникой.
В версии python >= 2.7 и в python 3:
d = {el:0 for el in a}
d = dict([(x,0) for x in a])
** Изменить решение Tim лучше, потому что он использует генераторы, чтобы увидеть комментарий к его ответу.