【问题标题】:Set to dict Python设置为 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))

【问题讨论】:

标签: python dictionary set


【解决方案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() 否则会快。
    • 没错,理解比较慢。
    • @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() 的默认值的引用,因此当默认值是可变对象时要小心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 2019-02-18
      • 2012-02-26
      • 2016-04-04
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多