如何在Python中将数组转换为字典

3
现在,我想将一个数组转换成如下的字典格式:
dict = {'item0': arr[0], 'item1': arr[1], 'item2': arr[2]...}

如何在Python中优雅地解决这个问题?

1
我觉得你想这样做有点奇怪。为什么要将一个结构良好的列表/数组转换为字典?你没有添加任何信息--如果有的话,反而使恢复原始顺序更加困难... - mgilson
7个回答

13

您可以使用enumerate和字典推导式:

>>> arr = ["aa", "bb", "cc"]
>>> {'item{}'.format(i): x for i,x in enumerate(arr)}
{'item2': 'cc', 'item0': 'aa', 'item1': 'bb'}

为什么我在测试你的代码时出现了无效语法错误?箭头指向“for”。我没有改变任何东西。 - city
@city -- 你使用的是哪个版本的Python?如果你使用的是Python2.6,那么字典推导式还没有被创建。你需要退回到旧的字典构造器:dict(('item{0}'.format(i), x) for i, x in enumerate(arr)) - mgilson
@mgilson,是的,你说得对。现在它可以工作了。谢谢。 - city

2
假设我们有一个整数列表:ints:

我们可以使用字典推导式。

>>> l = [3, 2, 4, 5, 7, 9, 0, 9]
>>> d = {"item" + str(k): l[k] for k in range(len(l))}
>>> d
{'item5': 9, 'item4': 7, 'item7': 9, 'item6': 0, 'item1': 2, 'item0': 3, 'item3': 5, 'item2': 4}

1
使用字典推导式:Python 字典推导式 因此它会看起来像这样:
d = {"item%s" % index: value for (index, value) in enumerate(arr)}

请注意使用enumerate来给出列表中每个值的索引。

1
simpleArray = [ 2, 54, 32 ]
simpleDict = dict()
for index,item in enumerate(simpleArray):
    simpleDict["item{0}".format(index)] = item

print(simpleDict)

好的,第一行是输入,第二行是一个空字典。我们将在运行时填充它。

现在我们需要迭代,但正常的迭代方式在Python中被认为是不符合Python风格的。使用enumerate可以同时获得数组的索引和需要的项。看这里:Python 'for'循环中访问索引

因此,在每次迭代中,我们将从数组中获取一个项,并使用括号中的字符串作为键插入字典中。我使用format,因为使用%已经不推荐了。看这里:Python字符串格式化:% vs. .format

最后,我们将打印结果。使用print作为函数可以提高兼容性。


1
您可以使用字典推导式。例如:```

```。
>>> x = [1,2,3]
>>> {'item'+str(i):v for i, v in enumerate(x)}
>>> {'item2': 3, 'item0': 1, 'item1': 2}

1
你也可以使用 dict() 来构建你的字典。
d = dict(('item{}'.format(i), arr[i]) for i in xrange(len(arr)))

为什么要在这里点踩?如果您对一个回答进行了点踩,请说明原因,以便改进。 - salmanwahed

0

使用map,这可以这样解决:

a = [1, 2, 3]
d = list(map(lambda x: {f"item{x[0]}":x[1]}, enumerate(a)))

结果是:

[{'item0': 1}, {'item1': 2}, {'item2': 3}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接