【发布时间】:2011-04-21 15:13:12
【问题描述】:
我有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))]))
有效但丑陋。什么是更清洁的方式?
【问题讨论】:
标签: 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))]))
有效但丑陋。什么是更清洁的方式?
【问题讨论】:
标签: python dictionary
d = dict([(x,0) for x in a])
**edit Tim 的解决方案更好,因为它使用生成器,请参阅对他的回答的评论。
【讨论】:
dict((el,0) for el in a) 会很好用。
Python 2.7 及更高版本也支持字典推导。该语法是{el:0 for el in a}。
【讨论】:
{el:0 for el in a}。 (也可以随意将其添加到您的答案中。)
除了蒂姆的回答,它非常适合你的具体例子,值得一提的是collections.defaultdict,它可以让你做这样的事情:
>>> d = defaultdict(int)
>>> d[0] += 1
>>> d
{0: 1}
>>> d[4] += 1
>>> d
{0: 1, 4: 1}
对于在您的示例中映射[1, 2, 3, 4],这是一条离开水的鱼。但根据您提出问题的原因,这可能最终成为一种更合适的技术。
【讨论】:
d = dict.fromkeys(a, 0)
a 是列表,0 是默认值。注意不要将默认值设置为某个可变对象(即 list 或 dict),因为它将是一个对象,用作字典中每个键的值(请查看 here 以获得这种情况的解决方案)。数字/字符串是安全的。
【讨论】:
d = dict.fromkeys(set(a_list), []) 也可以使用
0 是可变的(例如列表或字典),你会遇到麻烦,因为它都指向同一个内存位置。因此,接受的答案更安全。
在 python 版本 >= 2.7 和 python 3 中:
d = {el:0 for el in a}
【讨论】: