【问题标题】:One liner: creating a dictionary from list with indices as keys一个班轮:从列表中创建一个字典,索引为键
【发布时间】:2013-05-12 13:01:38
【问题描述】:

我想从给定的列表中创建一个字典,只需一行。字典的键是索引,值是列表的元素。像这样的:

a = [51,27,13,56]         #given list

d = one-line-statement    #one line statement to create dictionary

print(d)

输出:

{0:51, 1:27, 2:13, 3:56}

我对为什么要 one 行没有任何具体要求。我只是在探索python,想知道这是否可能。

【问题讨论】:

  • 您认为拥有这本词典会给您带来什么好处?使用字典不会更快地进行索引查找。
  • @MartijnPieters:嗯,我可能需要,例如:{[x[0]:51, x[1]:27, x[2]:13, x[3]:56}
  • 那么就使用zip():dict(zip(x, a))

标签: python list dictionary python-3.x


【解决方案1】:
a = [51,27,13,56]
b = dict(enumerate(a))
print(b)

会产生

{0: 51, 1: 27, 2: 13, 3: 56}

enumerate(sequence, start=0)

返回一个枚举对象。 sequence 必须是一个序列、一个 iterator 或其他支持迭代的对象。由enumerate() 返回的迭代器的next() 方法返回一个tuple,其中包含一个计数(来自默认为0 的start)和通过迭代sequence获得的值>:

【讨论】:

  • @jamylak 但不需要删除你的。人们本可以了解count()...
【解决方案2】:

使用另一个构造函数,你有

a = [51,27,13,56]         #given list
d={i:x for i,x in enumerate(a)}
print(d)

【讨论】:

  • @StefanoSanfilippo Dict 和集合推导被向后移植到 Python 2.7。
  • 我的立场是正确的。不过,请记住,这不适用于以前的 Python 2 版本。
【解决方案3】:
{x:a[x] for x in range(len(a))}

【讨论】:

    【解决方案4】:

    尝试enumerate:它将返回一个元组列表(或迭代器)(i, a[i]),您可以从中构建一个dict

    a = [51,27,13,56]  
    b = dict(enumerate(a))
    print b
    

    【讨论】:

      【解决方案5】:

      只需使用列表推导。

      a = [51,27,13,56]  
      b = dict( [ (i,a[i]) for i in range(len(a)) ] )
      print b
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 2020-08-31
        • 1970-01-01
        • 2019-11-29
        相关资源
        最近更新 更多