一个班轮:从列表中创建一个字典,索引为键

Posted

技术标签:

【中文标题】一个班轮:从列表中创建一个字典,索引为键【英文标题】: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)) 【参考方案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

【讨论】:

以上是关于一个班轮:从列表中创建一个字典,索引为键的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有不同长度列表的字典中创建字典列表

使用 Counter 对象从两个列表中创建字典

如何在 Java 中创建字典? [关闭]

从字典列表中创建一个带有漂亮表的表

如何从字典列表中创建数据框 [关闭]

从字典列表中创建嵌套的 json 对象