设置为 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. 而不是附加0while 循环,为什么不创建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的主要内容,如果未能解决你的问题,请参考以下文章

PythonPython30个笔试题

PythonPython30个笔试题

绘图PythonPython数据分析matplotlib设置多个子图的间距以及设置总图的标题

str list tuple dict

Ubuntu设置python3为默认版本

pythonpython-os模块的常用函数