2015-12-24 4 views
3

Предположим, у меня есть список, как я могу создать словарь, где объект в списке является ключом, и не выбрал одно значение по умолчанию. например:Как сделать словарь из списка

inp : [a,b,c] 
out : {a:1,b:1,c:1} 

все, что я могу думать так:

dict={} 
list=['a','b','c'] 
for obj in list: 
    dict[obj]=1 

там чище путь? спасибо.

+1

попробовать список понимание в python – jmugz3

ответ

7

Вы можете использовать fromkeys, как Интс являются неизменны:

d = dict.fromkeys(l, 1) 

Демо:

In [6]: l = ['a','b','c'] 

In [7]: dict.fromkeys(l, 1) 
Out[7]: {'a': 1, 'b': 1, 'c': 1} 

Почему неизменность делает разницу можно увидеть с помощью изменяемый объект как , т.е. список:

In [10]: d = dict.fromkeys(l, []) 

In [11]: d["a"].append("foo") 

In [12]: d 
Out[12]: {'a': ['foo'], 'b': ['foo'], 'c': ['foo']} 

Изменчивое значение будет общим.

Вы также можете использовать Dict понимание которое было бы безопасно для либо изменяемые или неизменного значения:

d = {k: [] for k in l} 
d = {k: 1 for k in l} 
+0

wow awesome. настолько короткий и элегантный – limitless

+0

@limitless, не беспокойтесь, это нормально, когда вы значения неизменны, поскольку новые объекты создаются для каждого ключа, просто не делайте того же, когда они нет, если вы действительно не хотите делиться объектом –

+0

Как насчет того, быстрый способ префикса с изменяемыми объектами, например инициализация пустых массивов таким образом, чтобы они не связывали их вместе? Является ли оригинал для петли лучшим способом? – mix3d

1

Вы также можете сделать это следующим образом:

>>> lst = ['a','b','c'] 
>>> dict(zip(lst,[1]*len(lst))) 
{'a': 1, 'c': 1, 'b': 1} 
Смежные вопросы