设置为dict Python

设置为dict Python,python,dictionary,set,Python,Dictionary,Set,是否有任何pythonic方法将集合转换为dict 我得到了下面的一套 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)) a=[1,2,3,4,5,6] b=[] 而len(b)

是否有任何pythonic方法将集合转换为dict

我得到了下面的一套

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))
a=[1,2,3,4,5,6]
b=[]
而len(b)
使用:

演示:


这也适用于列表;从序列创建字典是最有效的方法。注意:所有值都是对您传递到
dict.fromkeys()
中的默认值的引用,因此当该默认值是可变对象时要小心。

除了中给出的方法外,您还可以使用如下字典理解:

s = {1,2,4,5,6}
d = {e:0 for e in s}
此方法比dict.fromkeys()慢,但它允许您将dict中的值设置为所需的值,以防您不希望它总是为零

您还可以使用它创建列表,列表理解比您在问题中的循环更快、更具pythonic。您可以在此处了解有关理解的更多信息:
这也是另一种方法

s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])

如果默认值是可变的,并且每个键都需要一个新对象,则使用此方法
dict.fromkeys()
要快得多。请参阅以进行比较。没错,理解速度较慢。@MartijnPieters我刚刚对其进行了计时,得到了
set(xrange(6))
的系数1.5x和
set(xrange(10000))的系数3x
。绝对更快,也没有理由不使用fromkeys
,但差别并没有那么大,这不太可能成为瓶颈。密切相关:。与其在
循环追加
0
时使用
b=[0]*len(a)
,为什么不使用
b=[0]*len(a)
?或者使用
itertools.izip(a,itertools.repeat(0))
。我希望有一种使用map和lambda的方法!
s = {1,2,4,5,6}
d = {e:0 for e in s}
s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])