Как создать словарь с ключами из списка и значениями по умолчанию (нуль)?
У меня есть 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 лучше, потому что он использует генераторы, чтобы увидеть комментарий к его ответу.