bla*_*ter 137 python dictionary
我有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))]))
Run Code Online (Sandbox Code Playgroud)
工作,但很难看.什么是更干净的方式?
Tim*_*ara 201
dict((el,0) for el in a)
会运作良好.
Python 2.7及更高版本也支持dict理解.那个语法是{el:0 for el in a}
.
eum*_*iro 155
d = dict.fromkeys(a, 0)
Run Code Online (Sandbox Code Playgroud)
a
是列表,0
是默认值.注意不要将默认值设置为某个可变对象(即列表或字典),因为它将是一个对象,用作字典中每个键的值(请在此处查看此案例的解决方案).数字/字符串是安全的.
And*_*rey 11
在python版本> = 2.7和python 3中:
d = {el:0 for el in a}
Run Code Online (Sandbox Code Playgroud)
除了蒂姆的答案,这个答案非常适合你的具体例子,值得一提的是collections.defaultdict
,这可以让你做到这样的事情:
>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
Run Code Online (Sandbox Code Playgroud)
对于[1, 2, 3, 4]
你的例子中的映射,它是一条脱离水的鱼.但根据您提出问题的原因,这可能最终成为一种更合适的技术.
d = dict([(x,0) for x in a])
Run Code Online (Sandbox Code Playgroud)
**编辑蒂姆的解决方案更好,因为它使用了生成器,请参阅对他的回答的评论。