Как инициализировать dict с ключами из списка и пустым значением в Python? - PullRequest
200 голосов
/ 11 февраля 2010

Я бы хотел получить от этого:

keys = [1,2,3]

к этому:

{1: None, 2: None, 3: None}

Есть ли питонский способ сделать это?

Это ужасный способ сделать это:

>>> keys = [1,2,3]
>>> dict([(1,2)])
{1: 2}
>>> dict(zip(keys, [None]*len(keys)))
{1: None, 2: None, 3: None}

Ответы [ 6 ]

329 голосов
/ 11 февраля 2010

dict.fromkeys([1, 2, 3, 4])

На самом деле это метод класса, поэтому он работает и для подклассов dict (например, collections.defaultdict). Необязательный второй аргумент указывает значение, используемое для ключей (по умолчанию None.)

222 голосов
/ 11 февраля 2010

никто не заботился о том, чтобы дать решение, основанное на диктовке?

>>> keys = [1,2,3,5,6,7]
>>> {key: None for key in keys}
{1: None, 2: None, 3: None, 5: None, 6: None, 7: None}
53 голосов
/ 11 февраля 2010
dict.fromkeys(keys, None)
12 голосов
/ 24 августа 2015
>>> keyDict = {"a","b","c","d"}

>>> dict([(key, []) for key in keyDict])

Выход:

{'a': [], 'c': [], 'b': [], 'd': []}
7 голосов
/ 11 февраля 2010
d = {}
for i in keys:
    d[i] = None
1 голос
/ 17 декабря 2018

В многих рабочих процессах, в которые вы хотите добавить значение по умолчанию / начальное значение для произвольных ключей, вам не нужно , чтобы заранее хешировать каждый ключ отдельно. Вы можете использовать collections.defaultdict. Например:

from collections import defaultdict

d = defaultdict(lambda: None)

print(d[1])  # None
print(d[2])  # None
print(d[3])  # None

Это более эффективно, оно избавляет от необходимости хэшировать все ваши ключи при создании экземпляра. Более того, defaultdict является подклассом dict, поэтому обычно нет необходимости преобразовывать обратно в обычный словарь.

Для рабочих процессов, для которых требуется управление допустимыми клавишами, вы можете использовать dict.fromkeys согласно принятому ответу:

d = dict.fromkeys([1, 2, 3, 4])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...