设置为 dict Python
Posted
技术标签:
【中文标题】设置为 dict Python【英文标题】:Set to dict Python 【发布时间】:2013-09-09 04:32:03 【问题描述】:有没有pythonic方法可以将集合转换为字典?
我得到了以下套装
s = 1,2,4,5,6
并且想要下面的字典
c = 1:0, 2:0, 3:0, 4:0, 5:0, 6:0
有一个你会做的清单
a = [1,2,3,4,5,6]
b = []
while len(b) < len(a):
b.append(0)
c = dict(itertools.izip(a,b))
【问题讨论】:
密切相关:Most Pythonic Way to Build Dictionary From Single List. 而不是附加0
的while
循环,为什么不创建b = [0] * len(a)
?或使用itertools.izip(a, itertools.repeat(0))
。
我希望有一种方法可以使用地图并做一些 lambda!
【参考方案1】:
这也是另一种方式
s = 1,2,3,4,5
dict([ (elem, 0) for elem in s ])
【讨论】:
【参考方案2】:除了@Martijn Pieters给出的方法外,你还可以像这样使用字典推导:
s = 1,2,4,5,6
d = e:0 for e in s
此方法比 dict.fromkeys() 慢,但它允许您将 dict 中的值设置为您需要的任何值,以防您不总是希望它为零。
您还可以使用它来创建列表,列表推导比您在问题中的循环更快、更 Pythonic。您可以在此处了解有关推导的更多信息: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
【讨论】:
如果默认值是可变的并且您需要为每个键创建一个新对象,则使用此方法。dict.fromkeys()
否则会远快。
查看Most Pythonic Way to Build Dictionary From Single List进行比较。
没错,理解比较慢。
@MartijnPieters 我刚刚计时,set(xrange(6))
的系数为 1.5 倍,set(xrange(10000))
的系数为 3 倍。绝对更快,没有理由不使用fromkeys
,但差异不是那么很大,这不太可能成为瓶颈。【参考方案3】:
使用dict.fromkeys()
:
c = dict.fromkeys(s, 0)
演示:
>>> s = 1,2,4,5,6
>>> dict.fromkeys(s, 0)
1: 0, 2: 0, 4: 0, 5: 0, 6: 0
这也适用于列表;这是从序列创建字典的最有效方法。请注意,所有值都是对您传递给 dict.fromkeys()
的默认值的引用,因此当默认值是可变对象时要小心。
【讨论】:
以上是关于设置为 dict Python的主要内容,如果未能解决你的问题,请参考以下文章