是否有任何pythonic的方式来将一个集合转换为字典?设置为字典Python
我得到了以下设置
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))
是否有任何pythonic的方式来将一个集合转换为字典?设置为字典Python
我得到了以下设置
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))
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()
的那一个默认值的引用,因此当该默认值是可变对象时要小心。
除了通过@Martijn Pieters给出的方法,你也可以使用字典的理解是这样的:
s = {1,2,4,5,6}
d = {e:0 for e in s}
这种方法比dict.fromkeys()慢,但它可以让你在字典中设置的值无论你需要什么,以防万一你不希望它为零。
您也可以使用它来创建列表,列表的解析速度更快,而且更像python,它代表了您在问题中存在的循环。您可以了解更多关于内涵这里: http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions
如果默认值是可变的,并且您需要每个键的新对象,则这是使用的方法。 'dict.fromkeys()'在其他情况下会更快*。 –
请参阅[从单个列表中建立字典的大多数Pythonic方法](http://stackoverflow.com/q/14258984)进行比较。 –
确实,理解速度较慢。 – papirrin
这也是另一种方法做
s = {1,2,3,4,5}
dict([ (elem, 0) for elem in s ])
密切相关:[最Python的方式来构建字典从单列表(http://stackoverflow.com/ q/14258984)。 –
而不是'while'循环追加'0',为什么不使'b = [0] * len(a)'?或者使用'itertools.izip(a,itertools.repeat(0))'。 –
我希望有一种方法可以使用地图并做一些lambda! – shuva