Как инициализировать dict с ключами из списка и пустым значением в Python?
Я хотел бы получить от этого:
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}
Ответы
Ответ 1
dict.fromkeys([1, 2, 3, 4])
На самом деле это классный метод, поэтому он работает и для подклассов dict (например, collections.defaultdict
). Необязательный второй аргумент указывает значение для использования для ключей (по умолчанию - None
.)
Ответ 2
Никто не заботился о том, чтобы дать решение по пониманию диктовки?
>>> 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}
Ответ 3
dict.fromkeys(keys, None)
Ответ 4
>>> keyDict = {"a","b","c","d"}
>>> dict([(key, []) for key in keyDict])
Вывод:
{'a': [], 'c': [], 'b': [], 'd': []}
Ответ 5
d = {}
for i in keys:
d[i] = None
Ответ 6
Во многих рабочих процессах, где вы хотите прикрепить значение по умолчанию/начальное значение для произвольных ключей, вам не нужно заранее хешировать каждый ключ отдельно. Вы можете использовать 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])
Ответ 7
d = {}
for i in range(len(keys)):
d.update({i+1:[]})