Как создать словарь с ключами из списка и значениями по умолчанию (нуль)?

У меня есть 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))]))

работает, но некрасиво. Какой более чистый способ?

Ответ 1

dict((el,0) for el in a) будет работать хорошо.

Python 2.7 и выше также поддерживают понимание dict. Этот синтаксис {el:0 for el in a}.

Ответ 2

d = dict.fromkeys(a, 0)

a - это список, 0 - значение по умолчанию. Обратите внимание, чтобы не устанавливать значение по умолчанию для какого-либо изменяемого объекта (например, list или dict), потому что это будет один объект, используемый как значение для каждого ключа в словаре (отметьте здесь для решения для этого случая). Номера/строки безопасны.

Ответ 3

В дополнение к ответу Тима, который очень подходит вашему конкретному примеру, стоит упомянуть collections.defaultdict, который позволяет вам делать что-то вроде это:

>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}

Для отображения [1, 2, 3, 4], как в вашем примере, это рыба из воды. Но в зависимости от причины, по которой вы задавали вопрос, это может оказаться более подходящей техникой.

Ответ 4

В версии python >= 2.7 и в python 3:

d = {el:0 for el in a}

Ответ 5

d = dict([(x,0) for x in a])

** Изменить решение Tim лучше, потому что он использует генераторы, чтобы увидеть комментарий к его ответу.