设置为dict Python
是否有任何pythonic方法将集合转换为dict 我得到了下面的一套设置为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)
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 ])