根据列表中的位置将列表转换为python字典

时间:2016-01-20 09:09:24

标签: python list dictionary iteration

我有一个这样的清单:

c = ['A','B','C']

我希望它将其转换为dict对象,如

d = {"alphabets":{"0":"A","1":"B","2":"C"}}

我目前已实现以下代码:

c = ["A","B","C"]
d={}
for i in range(len(c)):
    d.update({"alphabets":{str(i): c[i]}})
print d

但这会给出输出{'alphabets': {'2': 'C'}}。有人知道如何处理这个错误吗?

3 个答案:

答案 0 :(得分:5)

那是因为你正在更新字典。

警告:

我使用过普通字典。如果你愿意的话,你可以使用有序词典。

<强>代码:

c = ["A","B","C"]
d={"alphabets":{}}
for i,v in enumerate(c):
    d["alphabets"][str(i)]=v
print d

<强>输出:

{'alphabets': {'1': 'B', '0': 'A', '2': 'C'}}

备注:

  • 您的计划中的问题是您始终将密钥alphabets更新为新字典。
  • 这就是为什么你得到c:2,因为那是最后一次更新的字典 - 我做了什么是创建了一个带有键alphabets
  • 的字典

答案 1 :(得分:3)

您可以使用dict comprehension执行此操作:

In [196]: {'alphabets': {str(i):v for i, v in enumerate(c)}}
Out[196]: {'alphabets': {'0': 'A', '1': 'B', '2': 'C'}}

如果您需要订单,可以使用OrderedDict

中的collections
from collections import OrderedDict
l1 = [(str(i),v) for i, v in enumerate(c)]
d2 = OrderedDict(l1)

In [284]: d2
Out[284]: OrderedDict([('0', 'A'), ('1', 'B'), ('2', 'C')])

d = {'alphabets': d2}

In [286]: d
Out[286]: {'alphabets': OrderedDict([('0', 'A'), ('1', 'B'), ('2', 'C')])}

或@cezar建议的在线资讯:

d = {'alphabets': OrderedDict([(str(i), v) for i, v in enumerate(c)])}

答案 2 :(得分:2)

您也可以使用zip,但不能保持订单

>>>{'alphabets':{k:v for k,v in zip(range(len(c)),c)}}
>>>{'alphabets': {0: 'A', 1: 'B', 2: 'C'}}